aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs212
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs16
2 files changed, 42 insertions, 186 deletions
diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
index 400e453..5db56b0 100644
--- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
+++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
@@ -1752,191 +1752,37 @@ namespace OpenSim.Region.CoreModules.World.Land
1752 public void ClientOnParcelEjectUser(IClientAPI client, UUID parcelowner, uint flags, UUID target) 1752 public void ClientOnParcelEjectUser(IClientAPI client, UUID parcelowner, uint flags, UUID target)
1753 { 1753 {
1754 ScenePresence targetAvatar = null; 1754 ScenePresence targetAvatar = null;
1755 ((Scene)client.Scene).TryGetScenePresence(target, out targetAvatar);
1756 ScenePresence parcelManager = null; 1755 ScenePresence parcelManager = null;
1757 ((Scene)client.Scene).TryGetScenePresence(client.AgentId, out parcelManager); 1756
1758 //Just eject 1757 // Must have presences
1759 if (flags == 0) 1758 if (!m_scene.TryGetScenePresence(target, out targetAvatar) ||
1760 { 1759 !m_scene.TryGetScenePresence(client.AgentId, out parcelManager))
1761 if (targetAvatar.UserLevel == 0) 1760 return;
1762 { 1761
1763 ILandObject land = ((Scene)client.Scene).LandChannel.GetLandObject(targetAvatar.AbsolutePosition.X, targetAvatar.AbsolutePosition.Y); 1762 // Cannot eject estate managers or gods
1764 if (!((Scene)client.Scene).Permissions.CanEditParcelProperties(client.AgentId, land, GroupPowers.LandEjectAndFreeze)) 1763 if (m_scene.Permissions.IsAdministrator(target))
1765 return; 1764 return;
1766 1765
1767 Vector3 position = new Vector3(0, 0, 0); 1766 // Check if you even have permission to do this
1768 List<ILandObject> allParcels = new List<ILandObject>(); 1767 ILandObject land = m_scene.LandChannel.GetLandObject(targetAvatar.AbsolutePosition.X, targetAvatar.AbsolutePosition.Y);
1769 allParcels = AllParcels(); 1768 if (!m_scene.Permissions.CanEditParcelProperties(client.AgentId, land, GroupPowers.LandEjectAndFreeze) &&
1770 if (allParcels.Count != 1) 1769 !m_scene.Permissions.IsAdministrator(client.AgentId))
1771 { 1770 return;
1772 foreach (ILandObject parcel in allParcels) 1771
1773 { 1772 Vector3 pos = m_scene.GetNearestAllowedPosition(targetAvatar, land);
1774 if (parcel.LandData.GlobalID != land.LandData.GlobalID) 1773
1775 { 1774 targetAvatar.TeleportWithMomentum(pos);
1776 if (parcel.IsEitherBannedOrRestricted(targetAvatar.UUID) != true) 1775 targetAvatar.ControllingClient.SendAlertMessage("You have been ejected by " + parcelManager.Firstname + " " + parcelManager.Lastname);
1777 { 1776 parcelManager.ControllingClient.SendAlertMessage("Avatar Ejected.");
1778 for (int x = 1; x <= Constants.RegionSize; x += 2) 1777
1779 { 1778 if ((flags & 1) != 0) // Ban TODO: Remove magic number
1780 for (int y = 1; y <= Constants.RegionSize; y += 2)
1781 {
1782 if (parcel.ContainsPoint(x, y))
1783 {
1784 position = new Vector3(x, y, targetAvatar.AbsolutePosition.Z);
1785 targetAvatar.TeleportWithMomentum(position);
1786 targetAvatar.ControllingClient.SendAlertMessage("You have been ejected by " + parcelManager.Firstname + " " + parcelManager.Lastname);
1787 parcelManager.ControllingClient.SendAlertMessage("Avatar Ejected.");
1788 return;
1789 }
1790 }
1791 }
1792 }
1793 }
1794 }
1795 }
1796 Vector3 targetVector;
1797 if (targetAvatar.AbsolutePosition.X > targetAvatar.AbsolutePosition.Y)
1798 {
1799 if (targetAvatar.AbsolutePosition.X > .5 * Constants.RegionSize)
1800 {
1801 targetVector = new Vector3(Constants.RegionSize, targetAvatar.AbsolutePosition.Y, targetAvatar.AbsolutePosition.Z); ;
1802 targetAvatar.TeleportWithMomentum(targetVector);
1803 targetAvatar.ControllingClient.SendAlertMessage("You have been ejected by " + parcelManager.Firstname + " " + parcelManager.Lastname);
1804 parcelManager.ControllingClient.SendAlertMessage("Avatar Ejected.");
1805 return;
1806 }
1807 else
1808 {
1809 targetVector = new Vector3(0, targetAvatar.AbsolutePosition.Y, targetAvatar.AbsolutePosition.Z); ;
1810 targetAvatar.TeleportWithMomentum(targetVector);
1811 targetAvatar.ControllingClient.SendAlertMessage("You have been ejected by " + parcelManager.Firstname + " " + parcelManager.Lastname);
1812 parcelManager.ControllingClient.SendAlertMessage("Avatar Ejected.");
1813 return;
1814 }
1815 }
1816 else
1817 {
1818 if (targetAvatar.AbsolutePosition.Y > .5 * Constants.RegionSize)
1819 {
1820 targetVector = new Vector3(targetAvatar.AbsolutePosition.X, Constants.RegionSize, targetAvatar.AbsolutePosition.Z); ;
1821 targetAvatar.TeleportWithMomentum(targetVector);
1822 targetAvatar.ControllingClient.SendAlertMessage("You have been ejected by " + parcelManager.Firstname + " " + parcelManager.Lastname);
1823 parcelManager.ControllingClient.SendAlertMessage("Avatar Ejected.");
1824 return;
1825 }
1826 else
1827 {
1828 targetVector = new Vector3(targetAvatar.AbsolutePosition.X, 0, targetAvatar.AbsolutePosition.Z); ;
1829 targetAvatar.TeleportWithMomentum(targetVector);
1830 targetAvatar.ControllingClient.SendAlertMessage("You have been ejected by " + parcelManager.Firstname + " " + parcelManager.Lastname);
1831 parcelManager.ControllingClient.SendAlertMessage("Avatar Ejected.");
1832 return;
1833 }
1834 }
1835 }
1836 }
1837 //Eject and ban
1838 if (flags == 1)
1839 { 1779 {
1840 if (targetAvatar.UserLevel == 0) 1780 ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry();
1841 { 1781 entry.AgentID = targetAvatar.UUID;
1842 ILandObject land = ((Scene)client.Scene).LandChannel.GetLandObject(targetAvatar.AbsolutePosition.X, targetAvatar.AbsolutePosition.Y); 1782 entry.Flags = AccessList.Ban;
1843 if (!((Scene)client.Scene).Permissions.CanEditParcelProperties(client.AgentId, land, GroupPowers.LandEjectAndFreeze)) 1783 entry.Time = new DateTime();
1844 return; 1784
1845 1785 land.LandData.ParcelAccessList.Add(entry);
1846 Vector3 position = new Vector3(0, 0, 0);
1847 List<ILandObject> allParcels = new List<ILandObject>();
1848 allParcels = AllParcels();
1849 if (allParcels.Count != 1)
1850 {
1851 foreach (ILandObject parcel in allParcels)
1852 {
1853 if (parcel.LandData.GlobalID != land.LandData.GlobalID)
1854 {
1855 if (parcel.IsEitherBannedOrRestricted(targetAvatar.UUID) != true)
1856 {
1857 for (int x = 1; x <= Constants.RegionSize; x += 2)
1858 {
1859 for (int y = 1; y <= Constants.RegionSize; y += 2)
1860 {
1861 if (parcel.ContainsPoint(x, y))
1862 {
1863 position = new Vector3(x, y, targetAvatar.AbsolutePosition.Z);
1864 targetAvatar.TeleportWithMomentum(position);
1865 targetAvatar.ControllingClient.SendAlertMessage("You have been ejected and banned by " + parcelManager.Firstname + " " + parcelManager.Lastname);
1866 parcelManager.ControllingClient.SendAlertMessage("Avatar Ejected and Banned.");
1867 ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry();
1868 entry.AgentID = targetAvatar.UUID;
1869 entry.Flags = AccessList.Ban;
1870 entry.Time = new DateTime();
1871 land.LandData.ParcelAccessList.Add(entry);
1872 return;
1873 }
1874 }
1875 }
1876 }
1877 }
1878 }
1879 }
1880 Vector3 targetVector;
1881 if (targetAvatar.AbsolutePosition.X > targetAvatar.AbsolutePosition.Y)
1882 {
1883 if (targetAvatar.AbsolutePosition.X > .5 * Constants.RegionSize)
1884 {
1885 targetVector = new Vector3(Constants.RegionSize, targetAvatar.AbsolutePosition.Y, targetAvatar.AbsolutePosition.Z); ;
1886 targetAvatar.TeleportWithMomentum(targetVector);
1887 targetAvatar.ControllingClient.SendAlertMessage("You have been ejected and banned by " + parcelManager.Firstname + " " + parcelManager.Lastname);
1888 parcelManager.ControllingClient.SendAlertMessage("Avatar Ejected and Banned.");
1889 ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry();
1890 entry.AgentID = targetAvatar.UUID;
1891 entry.Flags = AccessList.Ban;
1892 entry.Time = new DateTime();
1893 land.LandData.ParcelAccessList.Add(entry);
1894 return;
1895 }
1896 else
1897 {
1898 targetVector = new Vector3(0, targetAvatar.AbsolutePosition.Y, targetAvatar.AbsolutePosition.Z); ;
1899 targetAvatar.TeleportWithMomentum(targetVector);
1900 targetAvatar.ControllingClient.SendAlertMessage("You have been ejected and banned by " + parcelManager.Firstname + " " + parcelManager.Lastname);
1901 parcelManager.ControllingClient.SendAlertMessage("Avatar Ejected and Banned.");
1902 ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry();
1903 entry.AgentID = targetAvatar.UUID;
1904 entry.Flags = AccessList.Ban;
1905 entry.Time = new DateTime();
1906 land.LandData.ParcelAccessList.Add(entry);
1907 return;
1908 }
1909 }
1910 else
1911 {
1912 if (targetAvatar.AbsolutePosition.Y > .5 * Constants.RegionSize)
1913 {
1914 targetVector = new Vector3(targetAvatar.AbsolutePosition.X, Constants.RegionSize, targetAvatar.AbsolutePosition.Z); ;
1915 targetAvatar.TeleportWithMomentum(targetVector);
1916 targetAvatar.ControllingClient.SendAlertMessage("You have been ejected and banned by " + parcelManager.Firstname + " " + parcelManager.Lastname);
1917 parcelManager.ControllingClient.SendAlertMessage("Avatar Ejected and Banned.");
1918 ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry();
1919 entry.AgentID = targetAvatar.UUID;
1920 entry.Flags = AccessList.Ban;
1921 entry.Time = new DateTime();
1922 land.LandData.ParcelAccessList.Add(entry);
1923 return;
1924 }
1925 else
1926 {
1927 targetVector = new Vector3(targetAvatar.AbsolutePosition.X, 0, targetAvatar.AbsolutePosition.Z); ;
1928 targetAvatar.TeleportWithMomentum(targetVector);
1929 targetAvatar.ControllingClient.SendAlertMessage("You have been ejected and banned by " + parcelManager.Firstname + " " + parcelManager.Lastname);
1930 parcelManager.ControllingClient.SendAlertMessage("Avatar Ejected and Banned.");
1931 ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry();
1932 entry.AgentID = targetAvatar.UUID;
1933 entry.Flags = AccessList.Ban;
1934 entry.Time = new DateTime();
1935 land.LandData.ParcelAccessList.Add(entry);
1936 return;
1937 }
1938 }
1939 }
1940 } 1786 }
1941 } 1787 }
1942 1788
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index b37df82..128954f 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -4855,9 +4855,14 @@ Environment.Exit(1);
4855 get { return m_allowScriptCrossings; } 4855 get { return m_allowScriptCrossings; }
4856 } 4856 }
4857 4857
4858 public Vector3? GetNearestAllowedPosition(ScenePresence avatar) 4858 public Vector3 GetNearestAllowedPosition(ScenePresence avatar)
4859 { 4859 {
4860 ILandObject nearestParcel = GetNearestAllowedParcel(avatar.UUID, avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y); 4860 return GetNearestAllowedPosition(avatar, null);
4861 }
4862
4863 public Vector3 GetNearestAllowedPosition(ScenePresence avatar, ILandObject excludeParcel)
4864 {
4865 ILandObject nearestParcel = GetNearestAllowedParcel(avatar.UUID, avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y, excludeParcel);
4861 4866
4862 if (nearestParcel != null) 4867 if (nearestParcel != null)
4863 { 4868 {
@@ -4916,13 +4921,18 @@ Environment.Exit(1);
4916 4921
4917 public ILandObject GetNearestAllowedParcel(UUID avatarId, float x, float y) 4922 public ILandObject GetNearestAllowedParcel(UUID avatarId, float x, float y)
4918 { 4923 {
4924 return GetNearestAllowedParcel(avatarId, x, y, null);
4925 }
4926
4927 public ILandObject GetNearestAllowedParcel(UUID avatarId, float x, float y, ILandObject excludeParcel)
4928 {
4919 List<ILandObject> all = AllParcels(); 4929 List<ILandObject> all = AllParcels();
4920 float minParcelDistance = float.MaxValue; 4930 float minParcelDistance = float.MaxValue;
4921 ILandObject nearestParcel = null; 4931 ILandObject nearestParcel = null;
4922 4932
4923 foreach (var parcel in all) 4933 foreach (var parcel in all)
4924 { 4934 {
4925 if (!parcel.IsEitherBannedOrRestricted(avatarId)) 4935 if (!parcel.IsEitherBannedOrRestricted(avatarId) && parcel != excludeParcel)
4926 { 4936 {
4927 float parcelDistance = GetParcelDistancefromPoint(parcel, x, y); 4937 float parcelDistance = GetParcelDistancefromPoint(parcel, x, y);
4928 if (parcelDistance < minParcelDistance) 4938 if (parcelDistance < minParcelDistance)