From 736bcc70feab07c6d5ad2987af0ff4c61222d7dc Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sun, 13 Dec 2015 18:07:40 +0000 Subject: [PATCH] change default landpoint type to anywhere (direct) --- OpenSim/Framework/LandData.cs | 2 +- .../World/Land/LandManagementModule.cs | 51 +++++++++++-------- 2 files changed, 32 insertions(+), 21 deletions(-) diff --git a/OpenSim/Framework/LandData.cs b/OpenSim/Framework/LandData.cs index 4fbbbc1eeb..da541af291 100644 --- a/OpenSim/Framework/LandData.cs +++ b/OpenSim/Framework/LandData.cs @@ -71,7 +71,7 @@ namespace OpenSim.Framework (uint)ParcelFlags.CreateObjects | (uint)ParcelFlags.AllowOtherScripts | (uint)ParcelFlags.AllowVoiceChat; - private byte _landingType = 0; + private byte _landingType = (byte)OpenMetaverse.LandingType.Direct; private string _name = "Your Parcel"; private ParcelStatus _status = ParcelStatus.Leased; private int _localID = 0; diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs index 084fadf75b..873035bab5 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs @@ -951,20 +951,26 @@ namespace OpenSim.Region.CoreModules.World.Land ILandObject startLandObject = GetLandObject(start_x, start_y); - if (startLandObject == null) return; + if (startLandObject == null) + return; + + if (!m_scene.Permissions.CanEditParcelProperties(attempting_user_id, startLandObject, GroupPowers.LandDivideJoin, true)) + { + return; + } //Loop through the points try { - int totalX = end_x - start_x; - int totalY = end_y - start_y; - for (int y = 0; y < totalY; y++) + for (int y = start_y; y < end_y; y++) { - for (int x = 0; x < totalX; x++) + for (int x = start_x; x < end_x; x++) { - ILandObject tempLandObject = GetLandObject(start_x + x, start_y + y); - if (tempLandObject == null) return; - if (tempLandObject != startLandObject) return; + ILandObject tempLandObject = GetLandObject(x, y); + if (tempLandObject == null) + return; + if (tempLandObject != startLandObject) + return; } } } @@ -973,18 +979,6 @@ namespace OpenSim.Region.CoreModules.World.Land return; } - //If we are still here, then they are subdividing within one piece of land - //Check owner - if (!m_scene.Permissions.CanEditParcelProperties(attempting_user_id, startLandObject, GroupPowers.LandDivideJoin, true)) - { - return; - } - - // invalidate landing point - startLandObject.LandData.LandingType = (byte)LandingType.None; - startLandObject.LandData.UserLocation = Vector3.Zero; - startLandObject.LandData.UserLookAt = Vector3.Zero; - //Lets create a new land object with bitmap activated at that point (keeping the old land objects info) ILandObject newLand = startLandObject.Copy(); @@ -993,6 +987,10 @@ namespace OpenSim.Region.CoreModules.World.Land newLand.LandData.Dwell = 0; // Clear "Show in search" on the cut out parcel to prevent double-charging newLand.LandData.Flags &= ~(uint)ParcelFlags.ShowDirectory; + // invalidate landing point + newLand.LandData.LandingType = (byte)LandingType.Direct; + newLand.LandData.UserLocation = Vector3.Zero; + newLand.LandData.UserLookAt = Vector3.Zero; newLand.SetLandBitmap(newLand.GetSquareLandBitmap(start_x, start_y, end_x, end_y)); @@ -1010,6 +1008,19 @@ namespace OpenSim.Region.CoreModules.World.Land UpdateLandObject(startLandObject.LandData.LocalID, startLandObject.LandData); result.SendLandUpdateToAvatarsOverMe(); + + if(startLandObject.LandData.LandingType == (byte)LandingType.LandingPoint) + { + int x = (int)startLandObject.LandData.UserLocation.X; + int y = (int)startLandObject.LandData.UserLocation.Y; + if(!startLandObject.ContainsPoint(x, y)) + { + startLandObject.LandData.LandingType = (byte)LandingType.Direct; + startLandObject.LandData.UserLocation = Vector3.Zero; + startLandObject.LandData.UserLookAt = Vector3.Zero; + } + } + startLandObject.SendLandUpdateToAvatarsOverMe(); m_scene.ForEachClient(SendParcelOverlay);