diff options
Diffstat (limited to 'OpenSim/Region/CoreModules/World/Land')
-rw-r--r-- | OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs | 115 | ||||
-rw-r--r-- | OpenSim/Region/CoreModules/World/Land/LandObject.cs | 14 |
2 files changed, 62 insertions, 67 deletions
diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs index ea71fd9..634685a 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs | |||
@@ -72,12 +72,12 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
72 | #pragma warning restore 0429 | 72 | #pragma warning restore 0429 |
73 | 73 | ||
74 | /// <value> | 74 | /// <value> |
75 | /// Local land ids at specified region co-ordinates (region size / 4) | 75 | /// Local land ids at specified region co-ordinates (region size / 4) |
76 | /// </value> | 76 | /// </value> |
77 | private readonly int[,] m_landIDList = new int[landArrayMax, landArrayMax]; | 77 | private readonly int[,] m_landIDList = new int[landArrayMax, landArrayMax]; |
78 | 78 | ||
79 | /// <value> | 79 | /// <value> |
80 | /// Land objects keyed by local id | 80 | /// Land objects keyed by local id |
81 | /// </value> | 81 | /// </value> |
82 | private readonly Dictionary<int, ILandObject> m_landList = new Dictionary<int, ILandObject>(); | 82 | private readonly Dictionary<int, ILandObject> m_landList = new Dictionary<int, ILandObject>(); |
83 | 83 | ||
@@ -92,8 +92,8 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
92 | 92 | ||
93 | #region INonSharedRegionModule Members | 93 | #region INonSharedRegionModule Members |
94 | 94 | ||
95 | public Type ReplaceableInterface | 95 | public Type ReplaceableInterface |
96 | { | 96 | { |
97 | get { return null; } | 97 | get { return null; } |
98 | } | 98 | } |
99 | 99 | ||
@@ -192,7 +192,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
192 | Debug.WriteLine(string.Format("Stopping force position because {0} is close enough to position {1}", forcedPosition.Value, clientAvatar.AbsolutePosition)); | 192 | Debug.WriteLine(string.Format("Stopping force position because {0} is close enough to position {1}", forcedPosition.Value, clientAvatar.AbsolutePosition)); |
193 | forcedPosition = null; | 193 | forcedPosition = null; |
194 | } | 194 | } |
195 | //if we are far away, teleport | 195 | //if we are far away, teleport |
196 | else if (Vector3.Distance(clientAvatar.AbsolutePosition, forcedPosition.Value) > 3) | 196 | else if (Vector3.Distance(clientAvatar.AbsolutePosition, forcedPosition.Value) > 3) |
197 | { | 197 | { |
198 | Debug.WriteLine(string.Format("Teleporting out because {0} is too far from avatar position {1}", forcedPosition.Value, clientAvatar.AbsolutePosition)); | 198 | Debug.WriteLine(string.Format("Teleporting out because {0} is too far from avatar position {1}", forcedPosition.Value, clientAvatar.AbsolutePosition)); |
@@ -321,8 +321,6 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
321 | } | 321 | } |
322 | } | 322 | } |
323 | 323 | ||
324 | |||
325 | |||
326 | private void ForceAvatarToPosition(ScenePresence avatar, Vector3? position) | 324 | private void ForceAvatarToPosition(ScenePresence avatar, Vector3? position) |
327 | { | 325 | { |
328 | if (m_scene.Permissions.IsGod(avatar.UUID)) return; | 326 | if (m_scene.Permissions.IsGod(avatar.UUID)) return; |
@@ -336,7 +334,6 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
336 | { | 334 | { |
337 | avatar.ControllingClient.SendAlertMessage( | 335 | avatar.ControllingClient.SendAlertMessage( |
338 | "You are not allowed on this parcel because the land owner has restricted access."); | 336 | "You are not allowed on this parcel because the land owner has restricted access."); |
339 | |||
340 | } | 337 | } |
341 | 338 | ||
342 | public void EventManagerOnAvatarEnteringNewParcel(ScenePresence avatar, int localLandID, UUID regionID) | 339 | public void EventManagerOnAvatarEnteringNewParcel(ScenePresence avatar, int localLandID, UUID regionID) |
@@ -448,7 +445,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
448 | if (clientAvatar.AbsolutePosition.Z < LandChannel.BAN_LINE_SAFETY_HIEGHT && | 445 | if (clientAvatar.AbsolutePosition.Z < LandChannel.BAN_LINE_SAFETY_HIEGHT && |
449 | clientAvatar.sentMessageAboutRestrictedParcelFlyingDown) | 446 | clientAvatar.sentMessageAboutRestrictedParcelFlyingDown) |
450 | { | 447 | { |
451 | EventManagerOnAvatarEnteringNewParcel(clientAvatar, parcel.LandData.LocalID, | 448 | EventManagerOnAvatarEnteringNewParcel(clientAvatar, parcel.LandData.LocalID, |
452 | m_scene.RegionInfo.RegionID); | 449 | m_scene.RegionInfo.RegionID); |
453 | //They are going under the safety line! | 450 | //They are going under the safety line! |
454 | if (!parcel.IsBannedFromLand(clientAvatar.UUID)) | 451 | if (!parcel.IsBannedFromLand(clientAvatar.UUID)) |
@@ -652,7 +649,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
652 | 649 | ||
653 | if (x_float > Constants.RegionSize || x_float <= 0 || y_float > Constants.RegionSize || y_float <= 0) | 650 | if (x_float > Constants.RegionSize || x_float <= 0 || y_float > Constants.RegionSize || y_float <= 0) |
654 | return null; | 651 | return null; |
655 | 652 | ||
656 | try | 653 | try |
657 | { | 654 | { |
658 | x = Convert.ToInt32(Math.Floor(Convert.ToDouble(x_float) / 4.0)); | 655 | x = Convert.ToInt32(Math.Floor(Convert.ToDouble(x_float) / 4.0)); |
@@ -667,7 +664,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
667 | { | 664 | { |
668 | return null; | 665 | return null; |
669 | } | 666 | } |
670 | 667 | ||
671 | lock (m_landList) | 668 | lock (m_landList) |
672 | { | 669 | { |
673 | // Corner case. If an autoreturn happens during sim startup | 670 | // Corner case. If an autoreturn happens during sim startup |
@@ -687,7 +684,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
687 | // they happen every time at border crossings | 684 | // they happen every time at border crossings |
688 | throw new Exception("Error: Parcel not found at point " + x + ", " + y); | 685 | throw new Exception("Error: Parcel not found at point " + x + ", " + y); |
689 | } | 686 | } |
690 | 687 | ||
691 | lock (m_landIDList) | 688 | lock (m_landIDList) |
692 | { | 689 | { |
693 | try | 690 | try |
@@ -741,7 +738,6 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
741 | 738 | ||
742 | public void EventManagerOnObjectBeingRemovedFromScene(SceneObjectGroup obj) | 739 | public void EventManagerOnObjectBeingRemovedFromScene(SceneObjectGroup obj) |
743 | { | 740 | { |
744 | |||
745 | lock (m_landList) | 741 | lock (m_landList) |
746 | { | 742 | { |
747 | foreach (LandObject p in m_landList.Values) | 743 | foreach (LandObject p in m_landList.Values) |
@@ -936,7 +932,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
936 | return; | 932 | return; |
937 | } | 933 | } |
938 | } | 934 | } |
939 | 935 | ||
940 | lock (m_landList) | 936 | lock (m_landList) |
941 | { | 937 | { |
942 | foreach (ILandObject slaveLandObject in selectedLandObjects) | 938 | foreach (ILandObject slaveLandObject in selectedLandObjects) |
@@ -1078,7 +1074,6 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1078 | temp.Add(currentParcel); | 1074 | temp.Add(currentParcel); |
1079 | } | 1075 | } |
1080 | } | 1076 | } |
1081 | |||
1082 | } | 1077 | } |
1083 | } | 1078 | } |
1084 | 1079 | ||
@@ -1121,7 +1116,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1121 | join(west, south, east, north, remote_client.AgentId); | 1116 | join(west, south, east, north, remote_client.AgentId); |
1122 | } | 1117 | } |
1123 | 1118 | ||
1124 | public void ClientOnParcelSelectObjects(int local_id, int request_type, | 1119 | public void ClientOnParcelSelectObjects(int local_id, int request_type, |
1125 | List<UUID> returnIDs, IClientAPI remote_client) | 1120 | List<UUID> returnIDs, IClientAPI remote_client) |
1126 | { | 1121 | { |
1127 | m_landList[local_id].SendForceObjectSelect(local_id, request_type, returnIDs, remote_client); | 1122 | m_landList[local_id].SendForceObjectSelect(local_id, request_type, returnIDs, remote_client); |
@@ -1358,31 +1353,31 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1358 | { | 1353 | { |
1359 | return RemoteParcelRequest(request, path, param, agentID, caps); | 1354 | return RemoteParcelRequest(request, path, param, agentID, caps); |
1360 | })); | 1355 | })); |
1361 | UUID parcelCapID = UUID.Random(); | 1356 | UUID parcelCapID = UUID.Random(); |
1362 | caps.RegisterHandler("ParcelPropertiesUpdate", | 1357 | caps.RegisterHandler("ParcelPropertiesUpdate", |
1363 | new RestStreamHandler("POST", "/CAPS/" + parcelCapID, | 1358 | new RestStreamHandler("POST", "/CAPS/" + parcelCapID, |
1364 | delegate(string request, string path, string param, | 1359 | delegate(string request, string path, string param, |
1365 | OSHttpRequest httpRequest, OSHttpResponse httpResponse) | 1360 | OSHttpRequest httpRequest, OSHttpResponse httpResponse) |
1366 | { | 1361 | { |
1367 | return ProcessPropertiesUpdate(request, path, param, agentID, caps); | 1362 | return ProcessPropertiesUpdate(request, path, param, agentID, caps); |
1368 | })); | 1363 | })); |
1369 | } | 1364 | } |
1370 | private string ProcessPropertiesUpdate(string request, string path, string param, UUID agentID, Caps caps) | 1365 | private string ProcessPropertiesUpdate(string request, string path, string param, UUID agentID, Caps caps) |
1371 | { | 1366 | { |
1372 | IClientAPI client; | 1367 | IClientAPI client; |
1373 | if ( ! m_scene.TryGetClient(agentID, out client) ) { | 1368 | if (! m_scene.TryGetClient(agentID, out client)) { |
1374 | m_log.WarnFormat("[LAND] unable to retrieve IClientAPI for {0}", agentID.ToString() ); | 1369 | m_log.WarnFormat("[LAND] unable to retrieve IClientAPI for {0}", agentID.ToString()); |
1375 | return LLSDHelpers.SerialiseLLSDReply(new LLSDEmpty()); | 1370 | return LLSDHelpers.SerialiseLLSDReply(new LLSDEmpty()); |
1376 | } | 1371 | } |
1377 | 1372 | ||
1378 | ParcelPropertiesUpdateMessage properties = new ParcelPropertiesUpdateMessage(); | 1373 | ParcelPropertiesUpdateMessage properties = new ParcelPropertiesUpdateMessage(); |
1379 | OpenMetaverse.StructuredData.OSDMap args = (OpenMetaverse.StructuredData.OSDMap) OSDParser.DeserializeLLSDXml(request); | 1374 | OpenMetaverse.StructuredData.OSDMap args = (OpenMetaverse.StructuredData.OSDMap) OSDParser.DeserializeLLSDXml(request); |
1380 | 1375 | ||
1381 | properties.Deserialize(args); | 1376 | properties.Deserialize(args); |
1382 | 1377 | ||
1383 | LandUpdateArgs land_update = new LandUpdateArgs(); | 1378 | LandUpdateArgs land_update = new LandUpdateArgs(); |
1384 | int parcelID = properties.LocalID; | 1379 | int parcelID = properties.LocalID; |
1385 | land_update.AuthBuyerID = properties.AuthBuyerID; | 1380 | land_update.AuthBuyerID = properties.AuthBuyerID; |
1386 | land_update.Category = properties.Category; | 1381 | land_update.Category = properties.Category; |
1387 | land_update.Desc = properties.Desc; | 1382 | land_update.Desc = properties.Desc; |
1388 | land_update.GroupID = properties.GroupID; | 1383 | land_update.GroupID = properties.GroupID; |
@@ -1399,15 +1394,15 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1399 | land_update.SnapshotID = properties.SnapshotID; | 1394 | land_update.SnapshotID = properties.SnapshotID; |
1400 | land_update.UserLocation = properties.UserLocation; | 1395 | land_update.UserLocation = properties.UserLocation; |
1401 | land_update.UserLookAt = properties.UserLookAt; | 1396 | land_update.UserLookAt = properties.UserLookAt; |
1402 | land_update.MediaDescription = properties.MediaDesc; | 1397 | land_update.MediaDescription = properties.MediaDesc; |
1403 | land_update.MediaType = properties.MediaType; | 1398 | land_update.MediaType = properties.MediaType; |
1404 | land_update.MediaWidth = properties.MediaWidth; | 1399 | land_update.MediaWidth = properties.MediaWidth; |
1405 | land_update.MediaHeight = properties.MediaHeight; | 1400 | land_update.MediaHeight = properties.MediaHeight; |
1406 | land_update.MediaLoop = properties.MediaLoop; | 1401 | land_update.MediaLoop = properties.MediaLoop; |
1407 | land_update.ObscureMusic = properties.ObscureMusic; | 1402 | land_update.ObscureMusic = properties.ObscureMusic; |
1408 | land_update.ObscureMedia = properties.ObscureMedia; | 1403 | land_update.ObscureMedia = properties.ObscureMedia; |
1409 | 1404 | ||
1410 | ILandObject land; | 1405 | ILandObject land; |
1411 | lock (m_landList) | 1406 | lock (m_landList) |
1412 | { | 1407 | { |
1413 | m_landList.TryGetValue(parcelID, out land); | 1408 | m_landList.TryGetValue(parcelID, out land); |
@@ -1415,15 +1410,15 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1415 | 1410 | ||
1416 | if (land != null) | 1411 | if (land != null) |
1417 | { | 1412 | { |
1418 | land.UpdateLandProperties(land_update, client); | 1413 | land.UpdateLandProperties(land_update, client); |
1419 | m_scene.EventManager.TriggerOnParcelPropertiesUpdateRequest(land_update, parcelID, client); | 1414 | m_scene.EventManager.TriggerOnParcelPropertiesUpdateRequest(land_update, parcelID, client); |
1420 | } | 1415 | } |
1421 | else | 1416 | else |
1422 | { | 1417 | { |
1423 | m_log.WarnFormat("[LAND] unable to find parcelID {0}", parcelID); | 1418 | m_log.WarnFormat("[LAND] unable to find parcelID {0}", parcelID); |
1424 | } | 1419 | } |
1425 | return LLSDHelpers.SerialiseLLSDReply(new LLSDEmpty()); | 1420 | return LLSDHelpers.SerialiseLLSDReply(new LLSDEmpty()); |
1426 | } | 1421 | } |
1427 | // we cheat here: As we don't have (and want) a grid-global parcel-store, we can't return the | 1422 | // we cheat here: As we don't have (and want) a grid-global parcel-store, we can't return the |
1428 | // "real" parcelID, because we wouldn't be able to map that to the region the parcel belongs to. | 1423 | // "real" parcelID, because we wouldn't be able to map that to the region the parcel belongs to. |
1429 | // So, we create a "fake" parcelID by using the regionHandle (64 bit), and the local (integer) x | 1424 | // So, we create a "fake" parcelID by using the regionHandle (64 bit), and the local (integer) x |
@@ -1500,19 +1495,19 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1500 | if (parcelID == UUID.Zero) | 1495 | if (parcelID == UUID.Zero) |
1501 | return; | 1496 | return; |
1502 | 1497 | ||
1503 | ExtendedLandData data = | 1498 | ExtendedLandData data = |
1504 | (ExtendedLandData)parcelInfoCache.Get(parcelID.ToString(), | 1499 | (ExtendedLandData)parcelInfoCache.Get(parcelID.ToString(), |
1505 | delegate(string id) | 1500 | delegate(string id) |
1506 | { | 1501 | { |
1507 | UUID parcel = UUID.Zero; | 1502 | UUID parcel = UUID.Zero; |
1508 | UUID.TryParse(id, out parcel); | 1503 | UUID.TryParse(id, out parcel); |
1509 | // assume we've got the parcelID we just computed in RemoteParcelRequest | 1504 | // assume we've got the parcelID we just computed in RemoteParcelRequest |
1510 | ExtendedLandData extLandData = new ExtendedLandData(); | 1505 | ExtendedLandData extLandData = new ExtendedLandData(); |
1511 | Util.ParseFakeParcelID(parcel, out extLandData.RegionHandle, | 1506 | Util.ParseFakeParcelID(parcel, out extLandData.RegionHandle, |
1512 | out extLandData.X, out extLandData.Y); | 1507 | out extLandData.X, out extLandData.Y); |
1513 | m_log.DebugFormat("[LAND] got parcelinfo request for regionHandle {0}, x/y {1}/{2}", | 1508 | m_log.DebugFormat("[LAND] got parcelinfo request for regionHandle {0}, x/y {1}/{2}", |
1514 | extLandData.RegionHandle, extLandData.X, extLandData.Y); | 1509 | extLandData.RegionHandle, extLandData.X, extLandData.Y); |
1515 | 1510 | ||
1516 | // for this region or for somewhere else? | 1511 | // for this region or for somewhere else? |
1517 | if (extLandData.RegionHandle == m_scene.RegionInfo.RegionHandle) | 1512 | if (extLandData.RegionHandle == m_scene.RegionInfo.RegionHandle) |
1518 | { | 1513 | { |
diff --git a/OpenSim/Region/CoreModules/World/Land/LandObject.cs b/OpenSim/Region/CoreModules/World/Land/LandObject.cs index 499b60c..d87352f 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandObject.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandObject.cs | |||
@@ -229,13 +229,13 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
229 | newData.SnapshotID = args.SnapshotID; | 229 | newData.SnapshotID = args.SnapshotID; |
230 | newData.UserLocation = args.UserLocation; | 230 | newData.UserLocation = args.UserLocation; |
231 | newData.UserLookAt = args.UserLookAt; | 231 | newData.UserLookAt = args.UserLookAt; |
232 | newData.MediaType = args.MediaType; | 232 | newData.MediaType = args.MediaType; |
233 | newData.MediaDescription = args.MediaDescription; | 233 | newData.MediaDescription = args.MediaDescription; |
234 | newData.MediaWidth = args.MediaWidth; | 234 | newData.MediaWidth = args.MediaWidth; |
235 | newData.MediaHeight = args.MediaHeight; | 235 | newData.MediaHeight = args.MediaHeight; |
236 | newData.MediaLoop = args.MediaLoop; | 236 | newData.MediaLoop = args.MediaLoop; |
237 | newData.ObscureMusic = args.ObscureMusic; | 237 | newData.ObscureMusic = args.ObscureMusic; |
238 | newData.ObscureMedia = args.ObscureMedia; | 238 | newData.ObscureMedia = args.ObscureMedia; |
239 | 239 | ||
240 | m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData); | 240 | m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData); |
241 | 241 | ||