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 1e1eee2..6b562e5 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};
@@ -459,15 +456,6 @@ namespace OpenSim.Region.Framework.Scenes
459 ParentGroup.HasGroupChanged = true; 456 ParentGroup.HasGroupChanged = true;
460 } 457 }
461 } 458 }
462
463 public Dictionary<int, string> CollisionFilter
464 {
465 get { return m_CollisionFilter; }
466 set
467 {
468 m_CollisionFilter = value;
469 }
470 }
471 459
472 public ulong RegionHandle 460 public ulong RegionHandle
473 { 461 {
@@ -1895,52 +1883,20 @@ namespace OpenSim.Region.Framework.Scenes
1895 1883
1896 if (m_parentGroup.Scene == null) 1884 if (m_parentGroup.Scene == null)
1897 return; 1885 return;
1898 #region collision Filter 1886
1899 SceneObjectPart obj = m_parentGroup.Scene.GetSceneObjectPart(localId); 1887 SceneObjectPart obj = m_parentGroup.Scene.GetSceneObjectPart(localId);
1900 if (obj != null) 1888 if (obj != null)
1901 { 1889 {
1902 if(m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name)) 1890 DetectedObject detobj = new DetectedObject();
1903 { 1891 detobj.keyUUID = obj.UUID;
1904 string data = ""; 1892 detobj.nameStr = obj.Name;
1905 m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); 1893 detobj.ownerUUID = obj._ownerID;
1906 //If it is 1, it is to accept ONLY collisions from this object 1894 detobj.posVector = obj.AbsolutePosition;
1907 if(data != "") 1895 detobj.rotQuat = obj.GetWorldRotation();
1908 { 1896 detobj.velVector = obj.Velocity;
1909 DetectedObject detobj = new DetectedObject(); 1897 detobj.colliderType = 0;
1910 detobj.keyUUID = obj.UUID; 1898 detobj.groupUUID = obj._groupID;
1911 detobj.nameStr = obj.Name; 1899 colliding.Add(detobj);
1912 detobj.ownerUUID = obj._ownerID;
1913 detobj.posVector = obj.AbsolutePosition;
1914 detobj.rotQuat = obj.GetWorldRotation();
1915 detobj.velVector = obj.Velocity;
1916 detobj.colliderType = 0;
1917 detobj.groupUUID = obj._groupID;
1918 colliding.Add(detobj);
1919 }
1920 //If it is 0, it is to not accept collisions from this object
1921 else
1922 {
1923 }
1924 }
1925 else
1926 {
1927 string data = "";
1928 m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data);
1929 //If it is 1, it is to accept ONLY collisions from this object, so this other object will not work
1930 if(data == "")
1931 {
1932 DetectedObject detobj = new DetectedObject();
1933 detobj.keyUUID = obj.UUID;
1934 detobj.nameStr = obj.Name;
1935 detobj.ownerUUID = obj._ownerID;
1936 detobj.posVector = obj.AbsolutePosition;
1937 detobj.rotQuat = obj.GetWorldRotation();
1938 detobj.velVector = obj.Velocity;
1939 detobj.colliderType = 0;
1940 detobj.groupUUID = obj._groupID;
1941 colliding.Add(detobj);
1942 }
1943 }
1944 } 1900 }
1945 else 1901 else
1946 { 1902 {
@@ -1952,52 +1908,19 @@ namespace OpenSim.Region.Framework.Scenes
1952 1908
1953 if (av.LocalId == localId) 1909 if (av.LocalId == localId)
1954 { 1910 {
1955 if(m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name)) 1911 DetectedObject detobj = new DetectedObject();
1956 { 1912 detobj.keyUUID = av.UUID;
1957 string data = ""; 1913 detobj.nameStr = av.ControllingClient.Name;
1958 m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); 1914 detobj.ownerUUID = av.UUID;
1959 //If it is 1, it is to accept ONLY collisions from this avatar 1915 detobj.posVector = av.AbsolutePosition;
1960 if(data != "") 1916 detobj.rotQuat = av.Rotation;
1961 { 1917 detobj.velVector = av.Velocity;
1962 DetectedObject detobj = new DetectedObject(); 1918 detobj.colliderType = 0;
1963 detobj.keyUUID = av.UUID; 1919 detobj.groupUUID = av.ControllingClient.ActiveGroupId;
1964 detobj.nameStr = av.ControllingClient.Name; 1920 colliding.Add(detobj);
1965 detobj.ownerUUID = av.UUID;
1966 detobj.posVector = av.AbsolutePosition;
1967 detobj.rotQuat = av.Rotation;
1968 detobj.velVector = av.Velocity;
1969 detobj.colliderType = 0;
1970 detobj.groupUUID = av.ControllingClient.ActiveGroupId;
1971 colliding.Add(detobj);
1972 }
1973 //If it is 0, it is to not accept collisions from this avatar
1974 else
1975 {
1976 }
1977 }
1978 else
1979 {
1980 string data = "";
1981 m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data);
1982 //If it is 1, it is to accept ONLY collisions from this avatar, so this other avatar will not work
1983 if(data == "")
1984 {
1985 DetectedObject detobj = new DetectedObject();
1986 detobj.keyUUID = av.UUID;
1987 detobj.nameStr = av.ControllingClient.Name;
1988 detobj.ownerUUID = av.UUID;
1989 detobj.posVector = av.AbsolutePosition;
1990 detobj.rotQuat = av.Rotation;
1991 detobj.velVector = av.Velocity;
1992 detobj.colliderType = 0;
1993 detobj.groupUUID = av.ControllingClient.ActiveGroupId;
1994 colliding.Add(detobj);
1995 }
1996 }
1997 } 1921 }
1998 } 1922 }
1999 } 1923 }
2000 #endregion
2001 } 1924 }
2002 if (colliding.Count > 0) 1925 if (colliding.Count > 0)
2003 { 1926 {
@@ -2031,105 +1954,41 @@ namespace OpenSim.Region.Framework.Scenes
2031 1954
2032 if (m_parentGroup.Scene == null) 1955 if (m_parentGroup.Scene == null)
2033 return; 1956 return;
2034 #region collision Filter 1957
2035 SceneObjectPart obj = m_parentGroup.Scene.GetSceneObjectPart(localId); 1958 SceneObjectPart obj = m_parentGroup.Scene.GetSceneObjectPart(localId);
2036 if (obj != null) 1959 if (obj != null)
2037 { 1960 {
2038 if(m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name)) 1961 DetectedObject detobj = new DetectedObject();
2039 { 1962 detobj.keyUUID = obj.UUID;
2040 string data = ""; 1963 detobj.nameStr = obj.Name;
2041 m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); 1964 detobj.ownerUUID = obj._ownerID;
2042 //If it is 1, it is to accept ONLY collisions from this object 1965 detobj.posVector = obj.AbsolutePosition;
2043 if(data != "") 1966 detobj.rotQuat = obj.GetWorldRotation();
2044 { 1967 detobj.velVector = obj.Velocity;
2045 DetectedObject detobj = new DetectedObject(); 1968 detobj.colliderType = 0;
2046 detobj.keyUUID = obj.UUID; 1969 detobj.groupUUID = obj._groupID;
2047 detobj.nameStr = obj.Name; 1970 colliding.Add(detobj);
2048 detobj.ownerUUID = obj._ownerID;
2049 detobj.posVector = obj.AbsolutePosition;
2050 detobj.rotQuat = obj.GetWorldRotation();
2051 detobj.velVector = obj.Velocity;
2052 detobj.colliderType = 0;
2053 detobj.groupUUID = obj._groupID;
2054 colliding.Add(detobj);
2055 }
2056 //If it is 0, it is to not accept collisions from this object
2057 else
2058 {
2059 }
2060 }
2061 else
2062 {
2063 string data = "";
2064 m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data);
2065 //If it is 1, it is to accept ONLY collisions from this object, so this other object will not work
2066 if(data == "")
2067 {
2068 DetectedObject detobj = new DetectedObject();
2069 detobj.keyUUID = obj.UUID;
2070 detobj.nameStr = obj.Name;
2071 detobj.ownerUUID = obj._ownerID;
2072 detobj.posVector = obj.AbsolutePosition;
2073 detobj.rotQuat = obj.GetWorldRotation();
2074 detobj.velVector = obj.Velocity;
2075 detobj.colliderType = 0;
2076 detobj.groupUUID = obj._groupID;
2077 colliding.Add(detobj);
2078 }
2079 }
2080 } 1971 }
2081 else 1972 else
2082 { 1973 {
2083 ScenePresence[] avlist = m_parentGroup.Scene.GetScenePresences(); 1974 ScenePresence[] avlist = m_parentGroup.Scene.GetScenePresences();
2084 1975
2085 for (int i = 0; i < avlist.Length; i++) 1976 for (int i = 0; i < avlist.Length; i++)
2086 { 1977 {
2087 ScenePresence av = avlist[i]; 1978 ScenePresence av = avlist[i];
2088 1979
2089 if (av.LocalId == localId) 1980 if (av.LocalId == localId)
2090 { 1981 {
2091 if(m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name)) 1982 DetectedObject detobj = new DetectedObject();
2092 { 1983 detobj.keyUUID = av.UUID;
2093 string data = ""; 1984 detobj.nameStr = av.Name;
2094 m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); 1985 detobj.ownerUUID = av.UUID;
2095 //If it is 1, it is to accept ONLY collisions from this avatar 1986 detobj.posVector = av.AbsolutePosition;
2096 if(data != "") 1987 detobj.rotQuat = av.Rotation;
2097 { 1988 detobj.velVector = av.Velocity;
2098 DetectedObject detobj = new DetectedObject(); 1989 detobj.colliderType = 0;
2099 detobj.keyUUID = av.UUID; 1990 detobj.groupUUID = av.ControllingClient.ActiveGroupId;
2100 detobj.nameStr = av.ControllingClient.Name; 1991 colliding.Add(detobj);
2101 detobj.ownerUUID = av.UUID;
2102 detobj.posVector = av.AbsolutePosition;
2103 detobj.rotQuat = av.Rotation;
2104 detobj.velVector = av.Velocity;
2105 detobj.colliderType = 0;
2106 detobj.groupUUID = av.ControllingClient.ActiveGroupId;
2107 colliding.Add(detobj);
2108 }
2109 //If it is 0, it is to not accept collisions from this avatar
2110 else
2111 {
2112 }
2113 }
2114 else
2115 {
2116 string data = "";
2117 m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data);
2118 //If it is 1, it is to accept ONLY collisions from this avatar, so this other avatar will not work
2119 if(data == "")
2120 {
2121 DetectedObject detobj = new DetectedObject();
2122 detobj.keyUUID = av.UUID;
2123 detobj.nameStr = av.ControllingClient.Name;
2124 detobj.ownerUUID = av.UUID;
2125 detobj.posVector = av.AbsolutePosition;
2126 detobj.rotQuat = av.Rotation;
2127 detobj.velVector = av.Velocity;
2128 detobj.colliderType = 0;
2129 detobj.groupUUID = av.ControllingClient.ActiveGroupId;
2130 colliding.Add(detobj);
2131 }
2132 }
2133 } 1992 }
2134 } 1993 }
2135 } 1994 }
@@ -2147,7 +2006,6 @@ namespace OpenSim.Region.Framework.Scenes
2147 m_parentGroup.Scene.EventManager.TriggerScriptColliding(LocalId, CollidingMessage); 2006 m_parentGroup.Scene.EventManager.TriggerScriptColliding(LocalId, CollidingMessage);
2148 } 2007 }
2149 } 2008 }
2150 #endregion
2151 } 2009 }
2152 2010
2153 if ((m_parentGroup.RootPart.ScriptEvents & scriptEvents.collision_end) != 0) 2011 if ((m_parentGroup.RootPart.ScriptEvents & scriptEvents.collision_end) != 0)
@@ -2166,52 +2024,19 @@ namespace OpenSim.Region.Framework.Scenes
2166 return; 2024 return;
2167 if (m_parentGroup.Scene == null) 2025 if (m_parentGroup.Scene == null)
2168 return; 2026 return;
2169 #region collision Filter
2170 SceneObjectPart obj = m_parentGroup.Scene.GetSceneObjectPart(localId); 2027 SceneObjectPart obj = m_parentGroup.Scene.GetSceneObjectPart(localId);
2171 if (obj != null) 2028 if (obj != null)
2172 { 2029 {
2173 if(m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name)) 2030 DetectedObject detobj = new DetectedObject();
2174 { 2031 detobj.keyUUID = obj.UUID;
2175 string data = ""; 2032 detobj.nameStr = obj.Name;
2176 m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); 2033 detobj.ownerUUID = obj._ownerID;
2177 //If it is 1, it is to accept ONLY collisions from this object 2034 detobj.posVector = obj.AbsolutePosition;
2178 if(data != "") 2035 detobj.rotQuat = obj.GetWorldRotation();
2179 { 2036 detobj.velVector = obj.Velocity;
2180 DetectedObject detobj = new DetectedObject(); 2037 detobj.colliderType = 0;
2181 detobj.keyUUID = obj.UUID; 2038 detobj.groupUUID = obj._groupID;
2182 detobj.nameStr = obj.Name; 2039 colliding.Add(detobj);
2183 detobj.ownerUUID = obj._ownerID;
2184 detobj.posVector = obj.AbsolutePosition;
2185 detobj.rotQuat = obj.GetWorldRotation();
2186 detobj.velVector = obj.Velocity;
2187 detobj.colliderType = 0;
2188 detobj.groupUUID = obj._groupID;
2189 colliding.Add(detobj);
2190 }
2191 //If it is 0, it is to not accept collisions from this object
2192 else
2193 {
2194 }
2195 }
2196 else
2197 {
2198 string data = "";
2199 m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data);
2200 //If it is 1, it is to accept ONLY collisions from this object, so this other object will not work
2201 if(data == "")
2202 {
2203 DetectedObject detobj = new DetectedObject();
2204 detobj.keyUUID = obj.UUID;
2205 detobj.nameStr = obj.Name;
2206 detobj.ownerUUID = obj._ownerID;
2207 detobj.posVector = obj.AbsolutePosition;
2208 detobj.rotQuat = obj.GetWorldRotation();
2209 detobj.velVector = obj.Velocity;
2210 detobj.colliderType = 0;
2211 detobj.groupUUID = obj._groupID;
2212 colliding.Add(detobj);
2213 }
2214 }
2215 } 2040 }
2216 else 2041 else
2217 { 2042 {
@@ -2223,52 +2048,19 @@ namespace OpenSim.Region.Framework.Scenes
2223 2048
2224 if (av.LocalId == localId) 2049 if (av.LocalId == localId)
2225 { 2050 {
2226 if(m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name)) 2051 DetectedObject detobj = new DetectedObject();
2227 { 2052 detobj.keyUUID = av.UUID;
2228 string data = ""; 2053 detobj.nameStr = av.Name;
2229 m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); 2054 detobj.ownerUUID = av.UUID;
2230 //If it is 1, it is to accept ONLY collisions from this avatar 2055 detobj.posVector = av.AbsolutePosition;
2231 if(data != "") 2056 detobj.rotQuat = av.Rotation;
2232 { 2057 detobj.velVector = av.Velocity;
2233 DetectedObject detobj = new DetectedObject(); 2058 detobj.colliderType = 0;
2234 detobj.keyUUID = av.UUID; 2059 detobj.groupUUID = av.ControllingClient.ActiveGroupId;
2235 detobj.nameStr = av.ControllingClient.Name; 2060 colliding.Add(detobj);
2236 detobj.ownerUUID = av.UUID;
2237 detobj.posVector = av.AbsolutePosition;
2238 detobj.rotQuat = av.Rotation;
2239 detobj.velVector = av.Velocity;
2240 detobj.colliderType = 0;
2241 detobj.groupUUID = av.ControllingClient.ActiveGroupId;
2242 colliding.Add(detobj);
2243 }
2244 //If it is 0, it is to not accept collisions from this avatar
2245 else
2246 {
2247 }
2248 }
2249 else
2250 {
2251 string data = "";
2252 m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data);
2253 //If it is 1, it is to accept ONLY collisions from this avatar, so this other avatar will not work
2254 if(data == "")
2255 {
2256 DetectedObject detobj = new DetectedObject();
2257 detobj.keyUUID = av.UUID;
2258 detobj.nameStr = av.ControllingClient.Name;
2259 detobj.ownerUUID = av.UUID;
2260 detobj.posVector = av.AbsolutePosition;
2261 detobj.rotQuat = av.Rotation;
2262 detobj.velVector = av.Velocity;
2263 detobj.colliderType = 0;
2264 detobj.groupUUID = av.ControllingClient.ActiveGroupId;
2265 colliding.Add(detobj);
2266 }
2267 }
2268 } 2061 }
2269 } 2062 }
2270 } 2063 }
2271 #endregion
2272 } 2064 }
2273 2065
2274 if (colliding.Count > 0) 2066 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 f0d73d3..3a229c2 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -2812,15 +2812,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2812 public void llCollisionFilter(string name, string id, int accept) 2812 public void llCollisionFilter(string name, string id, int accept)
2813 { 2813 {
2814 m_host.AddScriptLPS(1); 2814 m_host.AddScriptLPS(1);
2815 m_host.CollisionFilter.Clear(); 2815 NotImplemented("llCollisionFilter");
2816 if(id != null)
2817 {
2818 m_host.CollisionFilter.Add(accept,id);
2819 }
2820 else
2821 {
2822 m_host.CollisionFilter.Add(accept,name);
2823 }
2824 } 2816 }
2825 2817
2826 public void llTakeControls(int controls, int accept, int pass_on) 2818 public void llTakeControls(int controls, int accept, int pass_on)
@@ -8331,43 +8323,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8331 8323
8332 return -1; 8324 return -1;
8333 } 8325 }
8334 8326
8335 public void llSetInventoryPermMask(string item, int mask, int value) 8327 public void llSetInventoryPermMask(string item, int mask, int value)
8336 { 8328 {
8337 m_host.AddScriptLPS(1); 8329 m_host.AddScriptLPS(1);
8338 if (m_ScriptEngine.Config.GetBoolean("AllowGodFunctions", false)) 8330 NotImplemented("llSetInventoryPermMask");
8339 {
8340 if (World.Permissions.CanRunConsoleCommand(m_host.OwnerID))
8341 {
8342 lock (m_host.TaskInventory)
8343 {
8344 foreach (KeyValuePair<UUID, TaskInventoryItem> inv in m_host.TaskInventory)
8345 {
8346 if (inv.Value.Name == item)
8347 {
8348 switch (mask)
8349 {
8350 case 0:
8351 inv.Value.BasePermissions = (uint)value;
8352 break;
8353 case 1:
8354 inv.Value.CurrentPermissions = (uint)value;
8355 break;
8356 case 2:
8357 inv.Value.GroupPermissions = (uint)value;
8358 break;
8359 case 3:
8360 inv.Value.EveryonePermissions = (uint)value;
8361 break;
8362 case 4:
8363 inv.Value.NextPermissions = (uint)value;
8364 break;
8365 }
8366 }
8367 }
8368 }
8369 }
8370 }
8371 } 8331 }
8372 8332
8373 public LSL_String llGetInventoryCreator(string item) 8333 public LSL_String llGetInventoryCreator(string item)