Merge branch 'master' of ssh://opensimulator.org/var/git/opensim
commit
4bdba0a487
|
@ -174,9 +174,10 @@ namespace OpenSim.Framework
|
||||||
public delegate void ParcelAccessListRequest(
|
public delegate void ParcelAccessListRequest(
|
||||||
UUID agentID, UUID sessionID, uint flags, int sequenceID, int landLocalID, IClientAPI remote_client);
|
UUID agentID, UUID sessionID, uint flags, int sequenceID, int landLocalID, IClientAPI remote_client);
|
||||||
|
|
||||||
public delegate void ParcelAccessListUpdateRequest(
|
public delegate void ParcelAccessListUpdateRequest(UUID agentID, uint flags,
|
||||||
UUID agentID, UUID sessionID, uint flags, int landLocalID, List<ParcelManager.ParcelAccessEntry> entries,
|
int landLocalID, UUID transactionID, int sequenceID,
|
||||||
IClientAPI remote_client);
|
int sections, List<ParcelManager.ParcelAccessEntry> entries,
|
||||||
|
IClientAPI remote_client);
|
||||||
|
|
||||||
public delegate void ParcelPropertiesRequest(
|
public delegate void ParcelPropertiesRequest(
|
||||||
int start_x, int start_y, int end_x, int end_y, int sequence_id, bool snap_selection, IClientAPI remote_client);
|
int start_x, int start_y, int end_x, int end_y, int sequence_id, bool snap_selection, IClientAPI remote_client);
|
||||||
|
|
|
@ -8239,7 +8239,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry();
|
ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry();
|
||||||
entry.AgentID = block.ID;
|
entry.AgentID = block.ID;
|
||||||
entry.Flags = (AccessList)block.Flags;
|
entry.Flags = (AccessList)block.Flags;
|
||||||
entry.Time = new DateTime();
|
entry.Time = Util.ToDateTime(block.Time);
|
||||||
entries.Add(entry);
|
entries.Add(entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8247,8 +8247,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
if (handlerParcelAccessListUpdateRequest != null)
|
if (handlerParcelAccessListUpdateRequest != null)
|
||||||
{
|
{
|
||||||
handlerParcelAccessListUpdateRequest(updatePacket.AgentData.AgentID,
|
handlerParcelAccessListUpdateRequest(updatePacket.AgentData.AgentID,
|
||||||
updatePacket.AgentData.SessionID, updatePacket.Data.Flags,
|
updatePacket.Data.Flags,
|
||||||
updatePacket.Data.LocalID, entries, this);
|
updatePacket.Data.LocalID,
|
||||||
|
updatePacket.Data.TransactionID,
|
||||||
|
updatePacket.Data.SequenceID,
|
||||||
|
updatePacket.Data.Sections,
|
||||||
|
entries, this);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -484,6 +484,22 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void UpdateAttachmentPosition(SceneObjectGroup sog, Vector3 pos)
|
||||||
|
{
|
||||||
|
// First we save the
|
||||||
|
// attachment point information, then we update the relative
|
||||||
|
// positioning. Then we have to mark the object as NOT an
|
||||||
|
// attachment. This is necessary in order to correctly save
|
||||||
|
// and retrieve GroupPosition information for the attachment.
|
||||||
|
// Finally, we restore the object's attachment status.
|
||||||
|
byte attachmentPoint = sog.GetAttachmentPoint();
|
||||||
|
sog.UpdateGroupPosition(pos);
|
||||||
|
sog.RootPart.IsAttachment = false;
|
||||||
|
sog.AbsolutePosition = sog.RootPart.AttachedPos;
|
||||||
|
sog.SetAttachmentPoint(attachmentPoint);
|
||||||
|
sog.HasGroupChanged = true;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Update the attachment asset for the new sog details if they have changed.
|
/// Update the attachment asset for the new sog details if they have changed.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -159,7 +159,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
client.OnParcelSelectObjects += ClientOnParcelSelectObjects;
|
client.OnParcelSelectObjects += ClientOnParcelSelectObjects;
|
||||||
client.OnParcelObjectOwnerRequest += ClientOnParcelObjectOwnerRequest;
|
client.OnParcelObjectOwnerRequest += ClientOnParcelObjectOwnerRequest;
|
||||||
client.OnParcelAccessListRequest += ClientOnParcelAccessListRequest;
|
client.OnParcelAccessListRequest += ClientOnParcelAccessListRequest;
|
||||||
client.OnParcelAccessListUpdateRequest += ClientOnParcelAccessUpdateListRequest;
|
client.OnParcelAccessListUpdateRequest += ClientOnParcelAccessListUpdateRequest;
|
||||||
client.OnParcelAbandonRequest += ClientOnParcelAbandonRequest;
|
client.OnParcelAbandonRequest += ClientOnParcelAbandonRequest;
|
||||||
client.OnParcelGodForceOwner += ClientOnParcelGodForceOwner;
|
client.OnParcelGodForceOwner += ClientOnParcelGodForceOwner;
|
||||||
client.OnParcelReclaim += ClientOnParcelReclaim;
|
client.OnParcelReclaim += ClientOnParcelReclaim;
|
||||||
|
@ -508,14 +508,22 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
|
|
||||||
if (land != null)
|
if (land != null)
|
||||||
{
|
{
|
||||||
m_landList[landLocalID].SendAccessList(agentID, sessionID, flags, sequenceID, remote_client);
|
land.SendAccessList(agentID, sessionID, flags, sequenceID, remote_client);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ClientOnParcelAccessUpdateListRequest(UUID agentID, UUID sessionID, uint flags, int landLocalID,
|
public void ClientOnParcelAccessListUpdateRequest(UUID agentID,
|
||||||
List<ParcelManager.ParcelAccessEntry> entries,
|
uint flags, int landLocalID, UUID transactionID, int sequenceID,
|
||||||
IClientAPI remote_client)
|
int sections, List<ParcelManager.ParcelAccessEntry> entries,
|
||||||
|
IClientAPI remote_client)
|
||||||
{
|
{
|
||||||
|
// Flags is the list to update, it can mean either the ban or
|
||||||
|
// the access list (WTH is a pass list? Mentioned in ParcelFlags)
|
||||||
|
//
|
||||||
|
// There may be multiple packets, because these can get LONG.
|
||||||
|
// Use transactionID to determine a new chain of packets since
|
||||||
|
// packets may have come in out of sequence and that would be
|
||||||
|
// a big mess if using the sequenceID
|
||||||
ILandObject land;
|
ILandObject land;
|
||||||
lock (m_landList)
|
lock (m_landList)
|
||||||
{
|
{
|
||||||
|
@ -524,9 +532,15 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
|
|
||||||
if (land != null)
|
if (land != null)
|
||||||
{
|
{
|
||||||
if (agentID == land.LandData.OwnerID)
|
GroupPowers requiredPowers = GroupPowers.LandManageAllowed;
|
||||||
|
if (flags == (uint)AccessList.Ban)
|
||||||
|
requiredPowers = GroupPowers.LandManageBanned;
|
||||||
|
|
||||||
|
if (m_scene.Permissions.CanEditParcelProperties(agentID,
|
||||||
|
land, requiredPowers))
|
||||||
{
|
{
|
||||||
land.UpdateAccessList(flags, entries, remote_client);
|
land.UpdateAccessList(flags, transactionID, sequenceID,
|
||||||
|
sections, entries, remote_client);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -854,7 +868,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
|
|
||||||
//If we are still here, then they are subdividing within one piece of land
|
//If we are still here, then they are subdividing within one piece of land
|
||||||
//Check owner
|
//Check owner
|
||||||
if (!m_scene.Permissions.CanEditParcel(attempting_user_id, startLandObject))
|
if (!m_scene.Permissions.CanEditParcelProperties(attempting_user_id, startLandObject, GroupPowers.LandDivideJoin))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -922,7 +936,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!m_scene.Permissions.CanEditParcel(attempting_user_id, masterLandObject))
|
if (!m_scene.Permissions.CanEditParcelProperties(attempting_user_id, masterLandObject, GroupPowers.LandDivideJoin))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1570,7 +1584,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
|
|
||||||
if (land == null) return;
|
if (land == null) return;
|
||||||
|
|
||||||
if (!m_scene.Permissions.CanEditParcel(remoteClient.AgentId, land))
|
if (!m_scene.Permissions.CanEditParcelProperties(remoteClient.AgentId, land, GroupPowers.LandOptions))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
land.LandData.OtherCleanTime = otherCleanTime;
|
land.LandData.OtherCleanTime = otherCleanTime;
|
||||||
|
|
|
@ -54,6 +54,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
protected LandData m_landData = new LandData();
|
protected LandData m_landData = new LandData();
|
||||||
protected Scene m_scene;
|
protected Scene m_scene;
|
||||||
protected List<SceneObjectGroup> primsOverMe = new List<SceneObjectGroup>();
|
protected List<SceneObjectGroup> primsOverMe = new List<SceneObjectGroup>();
|
||||||
|
protected Dictionary<uint, UUID> m_listTransactions = new Dictionary<uint, UUID>();
|
||||||
|
|
||||||
public bool[,] LandBitmap
|
public bool[,] LandBitmap
|
||||||
{
|
{
|
||||||
|
@ -199,36 +200,81 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
|
|
||||||
public void UpdateLandProperties(LandUpdateArgs args, IClientAPI remote_client)
|
public void UpdateLandProperties(LandUpdateArgs args, IClientAPI remote_client)
|
||||||
{
|
{
|
||||||
if (m_scene.Permissions.CanEditParcel(remote_client.AgentId,this))
|
//Needs later group support
|
||||||
{
|
bool snap_selection = false;
|
||||||
//Needs later group support
|
LandData newData = LandData.Copy();
|
||||||
bool snap_selection = false;
|
|
||||||
LandData newData = LandData.Copy();
|
|
||||||
|
|
||||||
if (args.AuthBuyerID != newData.AuthBuyerID || args.SalePrice != newData.SalePrice)
|
uint allowedDelta = 0;
|
||||||
|
|
||||||
|
// These two are always blocked as no client can set them anyway
|
||||||
|
// ParcelFlags.ForSaleObjects
|
||||||
|
// ParcelFlags.LindenHome
|
||||||
|
|
||||||
|
if (m_scene.Permissions.CanEditParcelProperties(remote_client.AgentId, this, GroupPowers.LandOptions))
|
||||||
|
{
|
||||||
|
allowedDelta |= (uint)(ParcelFlags.AllowLandmark |
|
||||||
|
ParcelFlags.AllowTerraform |
|
||||||
|
ParcelFlags.AllowDamage |
|
||||||
|
ParcelFlags.CreateObjects |
|
||||||
|
ParcelFlags.RestrictPushObject |
|
||||||
|
ParcelFlags.AllowGroupScripts |
|
||||||
|
ParcelFlags.CreateGroupObjects |
|
||||||
|
ParcelFlags.AllowAPrimitiveEntry |
|
||||||
|
ParcelFlags.AllowGroupObjectEntry);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_scene.Permissions.CanEditParcelProperties(remote_client.AgentId, this, GroupPowers.LandSetSale))
|
||||||
|
{
|
||||||
|
if (args.AuthBuyerID != newData.AuthBuyerID ||
|
||||||
|
args.SalePrice != newData.SalePrice)
|
||||||
{
|
{
|
||||||
if (m_scene.Permissions.CanSellParcel(remote_client.AgentId, this))
|
snap_selection = true;
|
||||||
{
|
|
||||||
newData.AuthBuyerID = args.AuthBuyerID;
|
|
||||||
newData.SalePrice = args.SalePrice;
|
|
||||||
snap_selection = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
newData.AuthBuyerID = args.AuthBuyerID;
|
||||||
|
newData.SalePrice = args.SalePrice;
|
||||||
|
|
||||||
|
if (!LandData.IsGroupOwned)
|
||||||
|
{
|
||||||
|
newData.GroupID = args.GroupID;
|
||||||
|
|
||||||
|
allowedDelta |= (uint)(ParcelFlags.AllowDeedToGroup |
|
||||||
|
ParcelFlags.ContributeWithDeed |
|
||||||
|
ParcelFlags.SellParcelObjects);
|
||||||
|
}
|
||||||
|
|
||||||
|
allowedDelta |= (uint)ParcelFlags.ForSale;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_scene.Permissions.CanEditParcelProperties(remote_client.AgentId,this, GroupPowers.FindPlaces))
|
||||||
|
{
|
||||||
newData.Category = args.Category;
|
newData.Category = args.Category;
|
||||||
|
|
||||||
|
allowedDelta |= (uint)(ParcelFlags.ShowDirectory |
|
||||||
|
ParcelFlags.AllowPublish |
|
||||||
|
ParcelFlags.MaturePublish);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_scene.Permissions.CanEditParcelProperties(remote_client.AgentId,this, GroupPowers.LandChangeIdentity))
|
||||||
|
{
|
||||||
newData.Description = args.Desc;
|
newData.Description = args.Desc;
|
||||||
newData.GroupID = args.GroupID;
|
newData.Name = args.Name;
|
||||||
|
newData.SnapshotID = args.SnapshotID;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_scene.Permissions.CanEditParcelProperties(remote_client.AgentId,this, GroupPowers.SetLandingPoint))
|
||||||
|
{
|
||||||
newData.LandingType = args.LandingType;
|
newData.LandingType = args.LandingType;
|
||||||
|
newData.UserLocation = args.UserLocation;
|
||||||
|
newData.UserLookAt = args.UserLookAt;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_scene.Permissions.CanEditParcelProperties(remote_client.AgentId,this, GroupPowers.ChangeMedia))
|
||||||
|
{
|
||||||
newData.MediaAutoScale = args.MediaAutoScale;
|
newData.MediaAutoScale = args.MediaAutoScale;
|
||||||
newData.MediaID = args.MediaID;
|
newData.MediaID = args.MediaID;
|
||||||
newData.MediaURL = args.MediaURL;
|
newData.MediaURL = args.MediaURL;
|
||||||
newData.MusicURL = args.MusicURL;
|
newData.MusicURL = args.MusicURL;
|
||||||
newData.Name = args.Name;
|
|
||||||
newData.Flags = args.ParcelFlags;
|
|
||||||
newData.PassHours = args.PassHours;
|
|
||||||
newData.PassPrice = args.PassPrice;
|
|
||||||
newData.SnapshotID = args.SnapshotID;
|
|
||||||
newData.UserLocation = args.UserLocation;
|
|
||||||
newData.UserLookAt = args.UserLookAt;
|
|
||||||
newData.MediaType = args.MediaType;
|
newData.MediaType = args.MediaType;
|
||||||
newData.MediaDescription = args.MediaDescription;
|
newData.MediaDescription = args.MediaDescription;
|
||||||
newData.MediaWidth = args.MediaWidth;
|
newData.MediaWidth = args.MediaWidth;
|
||||||
|
@ -237,10 +283,40 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
newData.ObscureMusic = args.ObscureMusic;
|
newData.ObscureMusic = args.ObscureMusic;
|
||||||
newData.ObscureMedia = args.ObscureMedia;
|
newData.ObscureMedia = args.ObscureMedia;
|
||||||
|
|
||||||
m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData);
|
allowedDelta |= (uint)(ParcelFlags.SoundLocal |
|
||||||
|
ParcelFlags.UrlWebPage |
|
||||||
SendLandUpdateToAvatarsOverMe(snap_selection);
|
ParcelFlags.UrlRawHtml |
|
||||||
|
ParcelFlags.AllowVoiceChat |
|
||||||
|
ParcelFlags.UseEstateVoiceChan);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_scene.Permissions.CanEditParcelProperties(remote_client.AgentId,this, GroupPowers.LandManagePasses))
|
||||||
|
{
|
||||||
|
newData.PassHours = args.PassHours;
|
||||||
|
newData.PassPrice = args.PassPrice;
|
||||||
|
|
||||||
|
allowedDelta |= (uint)ParcelFlags.UsePassList;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_scene.Permissions.CanEditParcelProperties(remote_client.AgentId, this, GroupPowers.LandManageAllowed))
|
||||||
|
{
|
||||||
|
allowedDelta |= (uint)(ParcelFlags.UseAccessGroup |
|
||||||
|
ParcelFlags.UseAccessList);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_scene.Permissions.CanEditParcelProperties(remote_client.AgentId, this, GroupPowers.LandManageBanned))
|
||||||
|
{
|
||||||
|
allowedDelta |= (uint)(ParcelFlags.UseBanList |
|
||||||
|
ParcelFlags.DenyAnonymous |
|
||||||
|
ParcelFlags.DenyAgeUnverified);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint preserve = LandData.Flags & ~allowedDelta;
|
||||||
|
newData.Flags = preserve | (args.ParcelFlags & allowedDelta);
|
||||||
|
|
||||||
|
m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData);
|
||||||
|
|
||||||
|
SendLandUpdateToAvatarsOverMe(snap_selection);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateLandSold(UUID avatarID, UUID groupID, bool groupOwned, uint AuctionID, int claimprice, int area)
|
public void UpdateLandSold(UUID avatarID, UUID groupID, bool groupOwned, uint AuctionID, int claimprice, int area)
|
||||||
|
@ -295,14 +371,14 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
|
|
||||||
if ((LandData.Flags & (uint) ParcelFlags.UseBanList) > 0)
|
if ((LandData.Flags & (uint) ParcelFlags.UseBanList) > 0)
|
||||||
{
|
{
|
||||||
ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry();
|
if (LandData.ParcelAccessList.FindIndex(
|
||||||
entry.AgentID = avatar;
|
delegate(ParcelManager.ParcelAccessEntry e)
|
||||||
entry.Flags = AccessList.Ban;
|
{
|
||||||
entry.Time = new DateTime();
|
if (e.AgentID == avatar && e.Flags == AccessList.Ban)
|
||||||
//See if they are on the list, but make sure the owner isn't banned
|
return true;
|
||||||
if (LandData.ParcelAccessList.Contains(entry) && LandData.OwnerID != avatar)
|
return false;
|
||||||
|
}) != -1 && LandData.OwnerID != avatar)
|
||||||
{
|
{
|
||||||
//They are banned, so lets send them a notice about this parcel
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -316,15 +392,14 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
|
|
||||||
if ((LandData.Flags & (uint) ParcelFlags.UseAccessList) > 0)
|
if ((LandData.Flags & (uint) ParcelFlags.UseAccessList) > 0)
|
||||||
{
|
{
|
||||||
ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry();
|
if (LandData.ParcelAccessList.FindIndex(
|
||||||
entry.AgentID = avatar;
|
delegate(ParcelManager.ParcelAccessEntry e)
|
||||||
entry.Flags = AccessList.Access;
|
{
|
||||||
entry.Time = new DateTime();
|
if (e.AgentID == avatar && e.Flags == AccessList.Access)
|
||||||
|
return true;
|
||||||
//If they are not on the access list and are not the owner
|
return false;
|
||||||
if (!LandData.ParcelAccessList.Contains(entry) && LandData.OwnerID != avatar)
|
}) == -1 && LandData.OwnerID != avatar)
|
||||||
{
|
{
|
||||||
//They are not allowed in this parcel, but not banned, so lets send them a notice about this parcel
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -421,39 +496,52 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateAccessList(uint flags, List<ParcelManager.ParcelAccessEntry> entries, IClientAPI remote_client)
|
public void UpdateAccessList(uint flags, UUID transactionID,
|
||||||
|
int sequenceID, int sections,
|
||||||
|
List<ParcelManager.ParcelAccessEntry> entries,
|
||||||
|
IClientAPI remote_client)
|
||||||
{
|
{
|
||||||
LandData newData = LandData.Copy();
|
LandData newData = LandData.Copy();
|
||||||
|
|
||||||
if (entries.Count == 1 && entries[0].AgentID == UUID.Zero)
|
if ((!m_listTransactions.ContainsKey(flags)) ||
|
||||||
|
m_listTransactions[flags] != transactionID)
|
||||||
{
|
{
|
||||||
entries.Clear();
|
m_listTransactions[flags] = transactionID;
|
||||||
}
|
|
||||||
|
|
||||||
List<ParcelManager.ParcelAccessEntry> toRemove = new List<ParcelManager.ParcelAccessEntry>();
|
List<ParcelManager.ParcelAccessEntry> toRemove =
|
||||||
foreach (ParcelManager.ParcelAccessEntry entry in newData.ParcelAccessList)
|
new List<ParcelManager.ParcelAccessEntry>();
|
||||||
{
|
|
||||||
if (entry.Flags == (AccessList)flags)
|
foreach (ParcelManager.ParcelAccessEntry entry in newData.ParcelAccessList)
|
||||||
{
|
{
|
||||||
toRemove.Add(entry);
|
if (entry.Flags == (AccessList)flags)
|
||||||
|
toRemove.Add(entry);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (ParcelManager.ParcelAccessEntry entry in toRemove)
|
||||||
|
{
|
||||||
|
newData.ParcelAccessList.Remove(entry);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Checked here because this will always be the first
|
||||||
|
// and only packet in a transaction
|
||||||
|
if (entries.Count == 1 && entries[0].AgentID == UUID.Zero)
|
||||||
|
{
|
||||||
|
m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData);
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (ParcelManager.ParcelAccessEntry entry in toRemove)
|
|
||||||
{
|
|
||||||
newData.ParcelAccessList.Remove(entry);
|
|
||||||
}
|
|
||||||
foreach (ParcelManager.ParcelAccessEntry entry in entries)
|
foreach (ParcelManager.ParcelAccessEntry entry in entries)
|
||||||
{
|
{
|
||||||
ParcelManager.ParcelAccessEntry temp = new ParcelManager.ParcelAccessEntry();
|
ParcelManager.ParcelAccessEntry temp =
|
||||||
|
new ParcelManager.ParcelAccessEntry();
|
||||||
|
|
||||||
temp.AgentID = entry.AgentID;
|
temp.AgentID = entry.AgentID;
|
||||||
temp.Time = new DateTime(); //Pointless? Yes.
|
temp.Time = entry.Time;
|
||||||
temp.Flags = (AccessList)flags;
|
temp.Flags = (AccessList)flags;
|
||||||
|
|
||||||
if (!newData.ParcelAccessList.Contains(temp))
|
newData.ParcelAccessList.Add(temp);
|
||||||
{
|
|
||||||
newData.ParcelAccessList.Add(temp);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData);
|
m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData);
|
||||||
|
@ -711,7 +799,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
|
|
||||||
public void SendForceObjectSelect(int local_id, int request_type, List<UUID> returnIDs, IClientAPI remote_client)
|
public void SendForceObjectSelect(int local_id, int request_type, List<UUID> returnIDs, IClientAPI remote_client)
|
||||||
{
|
{
|
||||||
if (m_scene.Permissions.CanEditParcel(remote_client.AgentId, this))
|
if (m_scene.Permissions.CanEditParcelProperties(remote_client.AgentId, this, GroupPowers.LandOptions))
|
||||||
{
|
{
|
||||||
List<uint> resultLocalIDs = new List<uint>();
|
List<uint> resultLocalIDs = new List<uint>();
|
||||||
try
|
try
|
||||||
|
@ -761,7 +849,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
/// </param>
|
/// </param>
|
||||||
public void SendLandObjectOwners(IClientAPI remote_client)
|
public void SendLandObjectOwners(IClientAPI remote_client)
|
||||||
{
|
{
|
||||||
if (m_scene.Permissions.CanEditParcel(remote_client.AgentId, this))
|
if (m_scene.Permissions.CanEditParcelProperties(remote_client.AgentId, this, GroupPowers.LandOptions))
|
||||||
{
|
{
|
||||||
Dictionary<UUID, int> primCount = new Dictionary<UUID, int>();
|
Dictionary<UUID, int> primCount = new Dictionary<UUID, int>();
|
||||||
List<UUID> groups = new List<UUID>();
|
List<UUID> groups = new List<UUID>();
|
||||||
|
|
|
@ -37,56 +37,6 @@ using OpenSim.Region.Framework.Interfaces;
|
||||||
using OpenSim.Region.Framework.Scenes;
|
using OpenSim.Region.Framework.Scenes;
|
||||||
using OpenSim.Services.Interfaces;
|
using OpenSim.Services.Interfaces;
|
||||||
|
|
||||||
// Temporary fix of wrong GroupPowers constants in OpenMetaverse library
|
|
||||||
enum GroupPowers : long
|
|
||||||
{
|
|
||||||
None = 0,
|
|
||||||
LandEjectAndFreeze = 1,
|
|
||||||
Invite = 2,
|
|
||||||
ReturnGroupSet = 2,
|
|
||||||
Eject = 4,
|
|
||||||
ReturnNonGroup = 4,
|
|
||||||
ChangeOptions = 8,
|
|
||||||
LandGardening = 8,
|
|
||||||
CreateRole = 16,
|
|
||||||
DeedObject = 16,
|
|
||||||
ModerateChat = 32,
|
|
||||||
DeleteRole = 32,
|
|
||||||
RoleProperties = 64,
|
|
||||||
ObjectManipulate = 64,
|
|
||||||
ObjectSetForSale = 128,
|
|
||||||
AssignMemberLimited = 128,
|
|
||||||
AssignMember = 256,
|
|
||||||
Accountable = 256,
|
|
||||||
RemoveMember = 512,
|
|
||||||
SendNotices = 1024,
|
|
||||||
ChangeActions = 1024,
|
|
||||||
ChangeIdentity = 2048,
|
|
||||||
ReceiveNotices = 2048,
|
|
||||||
StartProposal = 4096,
|
|
||||||
LandDeed = 4096,
|
|
||||||
VoteOnProposal = 8192,
|
|
||||||
LandRelease = 8192,
|
|
||||||
LandSetSale = 16384,
|
|
||||||
LandDivideJoin = 32768,
|
|
||||||
ReturnGroupOwned = 65536,
|
|
||||||
JoinChat = 65536,
|
|
||||||
FindPlaces = 131072,
|
|
||||||
LandChangeIdentity = 262144,
|
|
||||||
SetLandingPoint = 524288,
|
|
||||||
ChangeMedia = 1048576,
|
|
||||||
LandEdit = 2097152,
|
|
||||||
LandOptions = 4194304,
|
|
||||||
AllowEditLand = 8388608,
|
|
||||||
AllowFly = 16777216,
|
|
||||||
AllowRez = 33554432,
|
|
||||||
AllowLandmark = 67108864,
|
|
||||||
AllowVoiceChat = 134217728,
|
|
||||||
AllowSetHome = 268435456,
|
|
||||||
LandManageAllowed = 536870912,
|
|
||||||
LandManageBanned = 1073741824
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace OpenSim.Region.CoreModules.World.Permissions
|
namespace OpenSim.Region.CoreModules.World.Permissions
|
||||||
{
|
{
|
||||||
public class PermissionsModule : IRegionModule
|
public class PermissionsModule : IRegionModule
|
||||||
|
@ -214,7 +164,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
||||||
m_scene.Permissions.OnDuplicateObject += CanDuplicateObject;
|
m_scene.Permissions.OnDuplicateObject += CanDuplicateObject;
|
||||||
m_scene.Permissions.OnDeleteObject += CanDeleteObject; //MAYBE FULLY IMPLEMENTED
|
m_scene.Permissions.OnDeleteObject += CanDeleteObject; //MAYBE FULLY IMPLEMENTED
|
||||||
m_scene.Permissions.OnEditObject += CanEditObject; //MAYBE FULLY IMPLEMENTED
|
m_scene.Permissions.OnEditObject += CanEditObject; //MAYBE FULLY IMPLEMENTED
|
||||||
m_scene.Permissions.OnEditParcel += CanEditParcel; //MAYBE FULLY IMPLEMENTED
|
m_scene.Permissions.OnEditParcelProperties += CanEditParcelProperties; //MAYBE FULLY IMPLEMENTED
|
||||||
m_scene.Permissions.OnInstantMessage += CanInstantMessage;
|
m_scene.Permissions.OnInstantMessage += CanInstantMessage;
|
||||||
m_scene.Permissions.OnInventoryTransfer += CanInventoryTransfer; //NOT YET IMPLEMENTED
|
m_scene.Permissions.OnInventoryTransfer += CanInventoryTransfer; //NOT YET IMPLEMENTED
|
||||||
m_scene.Permissions.OnIssueEstateCommand += CanIssueEstateCommand; //FULLY IMPLEMENTED
|
m_scene.Permissions.OnIssueEstateCommand += CanIssueEstateCommand; //FULLY IMPLEMENTED
|
||||||
|
@ -1005,12 +955,12 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
||||||
return GenericObjectPermission(editorID, objectID, false);
|
return GenericObjectPermission(editorID, objectID, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool CanEditParcel(UUID user, ILandObject parcel, Scene scene)
|
private bool CanEditParcelProperties(UUID user, ILandObject parcel, GroupPowers p, Scene scene)
|
||||||
{
|
{
|
||||||
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||||
if (m_bypassPermissions) return m_bypassPermissionsValue;
|
if (m_bypassPermissions) return m_bypassPermissionsValue;
|
||||||
|
|
||||||
return GenericParcelOwnerPermission(user, parcel, (ulong)GroupPowers.LandDivideJoin);
|
return GenericParcelOwnerPermission(user, parcel, (ulong)p);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -113,14 +113,17 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Update the user inventory to show a detach.
|
/// Update the user inventory to show a detach.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="itemID">
|
/// <param name="itemID">/param>
|
||||||
/// A <see cref="UUID"/>
|
/// <param name="remoteClient"></param>
|
||||||
/// </param>
|
|
||||||
/// <param name="remoteClient">
|
|
||||||
/// A <see cref="IClientAPI"/>
|
|
||||||
/// </param>
|
|
||||||
void ShowDetachInUserInventory(UUID itemID, IClientAPI remoteClient);
|
void ShowDetachInUserInventory(UUID itemID, IClientAPI remoteClient);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Update the position of an attachment.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sog"></param>
|
||||||
|
/// <param name="pos"></param>
|
||||||
|
void UpdateAttachmentPosition(SceneObjectGroup sog, Vector3 pos);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Update the user inventory with a changed attachment
|
/// Update the user inventory with a changed attachment
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -57,7 +57,7 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
void SendLandUpdateToClient(bool snap_selection, IClientAPI remote_client);
|
void SendLandUpdateToClient(bool snap_selection, IClientAPI remote_client);
|
||||||
List<UUID> CreateAccessListArrayByFlag(AccessList flag);
|
List<UUID> CreateAccessListArrayByFlag(AccessList flag);
|
||||||
void SendAccessList(UUID agentID, UUID sessionID, uint flags, int sequenceID, IClientAPI remote_client);
|
void SendAccessList(UUID agentID, UUID sessionID, uint flags, int sequenceID, IClientAPI remote_client);
|
||||||
void UpdateAccessList(uint flags, List<ParcelManager.ParcelAccessEntry> entries, IClientAPI remote_client);
|
void UpdateAccessList(uint flags, UUID transactionID, int sequenceID, int sections, List<ParcelManager.ParcelAccessEntry> entries, IClientAPI remote_client);
|
||||||
void UpdateLandBitmapByteArray();
|
void UpdateLandBitmapByteArray();
|
||||||
void SetLandBitmapFromByteArray();
|
void SetLandBitmapFromByteArray();
|
||||||
bool[,] GetLandBitmap();
|
bool[,] GetLandBitmap();
|
||||||
|
|
|
@ -68,6 +68,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
public delegate bool IsGodHandler(UUID user, Scene requestFromScene);
|
public delegate bool IsGodHandler(UUID user, Scene requestFromScene);
|
||||||
public delegate bool IsAdministratorHandler(UUID user);
|
public delegate bool IsAdministratorHandler(UUID user);
|
||||||
public delegate bool EditParcelHandler(UUID user, ILandObject parcel, Scene scene);
|
public delegate bool EditParcelHandler(UUID user, ILandObject parcel, Scene scene);
|
||||||
|
public delegate bool EditParcelPropertiesHandler(UUID user, ILandObject parcel, GroupPowers p, Scene scene);
|
||||||
public delegate bool SellParcelHandler(UUID user, ILandObject parcel, Scene scene);
|
public delegate bool SellParcelHandler(UUID user, ILandObject parcel, Scene scene);
|
||||||
public delegate bool AbandonParcelHandler(UUID user, ILandObject parcel, Scene scene);
|
public delegate bool AbandonParcelHandler(UUID user, ILandObject parcel, Scene scene);
|
||||||
public delegate bool ReclaimParcelHandler(UUID user, ILandObject parcel, Scene scene);
|
public delegate bool ReclaimParcelHandler(UUID user, ILandObject parcel, Scene scene);
|
||||||
|
@ -131,6 +132,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
public event IsGodHandler OnIsGod;
|
public event IsGodHandler OnIsGod;
|
||||||
public event IsAdministratorHandler OnIsAdministrator;
|
public event IsAdministratorHandler OnIsAdministrator;
|
||||||
public event EditParcelHandler OnEditParcel;
|
public event EditParcelHandler OnEditParcel;
|
||||||
|
public event EditParcelPropertiesHandler OnEditParcelProperties;
|
||||||
public event SellParcelHandler OnSellParcel;
|
public event SellParcelHandler OnSellParcel;
|
||||||
public event AbandonParcelHandler OnAbandonParcel;
|
public event AbandonParcelHandler OnAbandonParcel;
|
||||||
public event ReclaimParcelHandler OnReclaimParcel;
|
public event ReclaimParcelHandler OnReclaimParcel;
|
||||||
|
@ -720,15 +722,16 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region EDIT PARCEL
|
#region EDIT PARCEL
|
||||||
public bool CanEditParcel(UUID user, ILandObject parcel)
|
|
||||||
|
public bool CanEditParcelProperties(UUID user, ILandObject parcel, GroupPowers p)
|
||||||
{
|
{
|
||||||
EditParcelHandler handler = OnEditParcel;
|
EditParcelPropertiesHandler handler = OnEditParcelProperties;
|
||||||
if (handler != null)
|
if (handler != null)
|
||||||
{
|
{
|
||||||
Delegate[] list = handler.GetInvocationList();
|
Delegate[] list = handler.GetInvocationList();
|
||||||
foreach (EditParcelHandler h in list)
|
foreach (EditParcelPropertiesHandler h in list)
|
||||||
{
|
{
|
||||||
if (h(user, parcel, m_scene) == false)
|
if (h(user, parcel, p, m_scene) == false)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1281,13 +1281,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
if (group.IsAttachment || (group.RootPart.Shape.PCode == 9 && group.RootPart.Shape.State != 0))
|
if (group.IsAttachment || (group.RootPart.Shape.PCode == 9 && group.RootPart.Shape.State != 0))
|
||||||
{
|
{
|
||||||
// Set the new attachment point data in the object
|
if (m_parentScene.AttachmentsModule != null)
|
||||||
byte attachmentPoint = group.GetAttachmentPoint();
|
m_parentScene.AttachmentsModule.UpdateAttachmentPosition(group, pos);
|
||||||
group.UpdateGroupPosition(pos);
|
|
||||||
group.RootPart.IsAttachment = false;
|
|
||||||
group.AbsolutePosition = group.RootPart.AttachedPos;
|
|
||||||
group.SetAttachmentPoint(attachmentPoint);
|
|
||||||
group.HasGroupChanged = true;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -1001,7 +1001,7 @@ namespace OpenSim.Region.RegionCombinerModule
|
||||||
VirtualRegion.Permissions.OnDuplicateObject += BigRegion.PermissionModule.CanDuplicateObject;
|
VirtualRegion.Permissions.OnDuplicateObject += BigRegion.PermissionModule.CanDuplicateObject;
|
||||||
VirtualRegion.Permissions.OnDeleteObject += BigRegion.PermissionModule.CanDeleteObject; //MAYBE FULLY IMPLEMENTED
|
VirtualRegion.Permissions.OnDeleteObject += BigRegion.PermissionModule.CanDeleteObject; //MAYBE FULLY IMPLEMENTED
|
||||||
VirtualRegion.Permissions.OnEditObject += BigRegion.PermissionModule.CanEditObject; //MAYBE FULLY IMPLEMENTED
|
VirtualRegion.Permissions.OnEditObject += BigRegion.PermissionModule.CanEditObject; //MAYBE FULLY IMPLEMENTED
|
||||||
VirtualRegion.Permissions.OnEditParcel += BigRegion.PermissionModule.CanEditParcel; //MAYBE FULLY IMPLEMENTED
|
VirtualRegion.Permissions.OnEditParcelProperties += BigRegion.PermissionModule.CanEditParcelProperties; //MAYBE FULLY IMPLEMENTED
|
||||||
VirtualRegion.Permissions.OnInstantMessage += BigRegion.PermissionModule.CanInstantMessage;
|
VirtualRegion.Permissions.OnInstantMessage += BigRegion.PermissionModule.CanInstantMessage;
|
||||||
VirtualRegion.Permissions.OnInventoryTransfer += BigRegion.PermissionModule.CanInventoryTransfer; //NOT YET IMPLEMENTED
|
VirtualRegion.Permissions.OnInventoryTransfer += BigRegion.PermissionModule.CanInventoryTransfer; //NOT YET IMPLEMENTED
|
||||||
VirtualRegion.Permissions.OnIssueEstateCommand += BigRegion.PermissionModule.CanIssueEstateCommand; //FULLY IMPLEMENTED
|
VirtualRegion.Permissions.OnIssueEstateCommand += BigRegion.PermissionModule.CanIssueEstateCommand; //FULLY IMPLEMENTED
|
||||||
|
|
|
@ -105,9 +105,9 @@ namespace OpenSim.Region.RegionCombinerModule
|
||||||
return m_rootScene.Permissions.CanEditObject(objectid, editorid);
|
return m_rootScene.Permissions.CanEditObject(objectid, editorid);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool CanEditParcel(UUID user, ILandObject parcel, Scene scene)
|
public bool CanEditParcelProperties(UUID user, ILandObject parcel, GroupPowers g, Scene scene)
|
||||||
{
|
{
|
||||||
return m_rootScene.Permissions.CanEditParcel(user, parcel);
|
return m_rootScene.Permissions.CanEditParcelProperties(user, parcel, g);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool CanInstantMessage(UUID user, UUID target, Scene startscene)
|
public bool CanInstantMessage(UUID user, UUID target, Scene startscene)
|
||||||
|
|
|
@ -6287,16 +6287,25 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
UUID key;
|
UUID key;
|
||||||
LandData land = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).LandData;
|
ILandObject land = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y);
|
||||||
if (land.OwnerID == m_host.OwnerID)
|
if (World.Permissions.CanEditParcelProperties(m_host.OwnerID, land, GroupPowers.LandManageAllowed))
|
||||||
{
|
{
|
||||||
ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry();
|
ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry();
|
||||||
if (UUID.TryParse(avatar, out key))
|
if (UUID.TryParse(avatar, out key))
|
||||||
{
|
{
|
||||||
entry.AgentID = key;
|
if (land.LandData.ParcelAccessList.FindIndex(
|
||||||
entry.Flags = AccessList.Access;
|
delegate(ParcelManager.ParcelAccessEntry e)
|
||||||
entry.Time = DateTime.Now.AddHours(hours);
|
{
|
||||||
land.ParcelAccessList.Add(entry);
|
if (e.AgentID == key && e.Flags == AccessList.Access)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}) == -1)
|
||||||
|
{
|
||||||
|
entry.AgentID = key;
|
||||||
|
entry.Flags = AccessList.Access;
|
||||||
|
entry.Time = DateTime.Now.AddHours(hours);
|
||||||
|
land.LandData.ParcelAccessList.Add(entry);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ScriptSleep(100);
|
ScriptSleep(100);
|
||||||
|
@ -9023,7 +9032,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
// according to the docs, this command only works if script owner and land owner are the same
|
// according to the docs, this command only works if script owner and land owner are the same
|
||||||
// lets add estate owners and gods, too, and use the generic permission check.
|
// lets add estate owners and gods, too, and use the generic permission check.
|
||||||
ILandObject landObject = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y);
|
ILandObject landObject = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y);
|
||||||
if (!World.Permissions.CanEditParcel(m_host.OwnerID, landObject)) return;
|
if (!World.Permissions.CanEditParcelProperties(m_host.OwnerID, landObject, GroupPowers.ChangeMedia)) return;
|
||||||
|
|
||||||
bool update = false; // send a ParcelMediaUpdate (and possibly change the land's media URL)?
|
bool update = false; // send a ParcelMediaUpdate (and possibly change the land's media URL)?
|
||||||
byte loop = 0;
|
byte loop = 0;
|
||||||
|
@ -9466,16 +9475,25 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
UUID key;
|
UUID key;
|
||||||
LandData land = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).LandData;
|
ILandObject land = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y);
|
||||||
if (land.OwnerID == m_host.OwnerID)
|
if (World.Permissions.CanEditParcelProperties(m_host.OwnerID, land, GroupPowers.LandManageBanned))
|
||||||
{
|
{
|
||||||
ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry();
|
ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry();
|
||||||
if (UUID.TryParse(avatar, out key))
|
if (UUID.TryParse(avatar, out key))
|
||||||
{
|
{
|
||||||
entry.AgentID = key;
|
if (land.LandData.ParcelAccessList.FindIndex(
|
||||||
entry.Flags = AccessList.Ban;
|
delegate(ParcelManager.ParcelAccessEntry e)
|
||||||
entry.Time = DateTime.Now.AddHours(hours);
|
{
|
||||||
land.ParcelAccessList.Add(entry);
|
if (e.AgentID == key && e.Flags == AccessList.Ban)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}) == -1)
|
||||||
|
{
|
||||||
|
entry.AgentID = key;
|
||||||
|
entry.Flags = AccessList.Ban;
|
||||||
|
entry.Time = DateTime.Now.AddHours(hours);
|
||||||
|
land.LandData.ParcelAccessList.Add(entry);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ScriptSleep(100);
|
ScriptSleep(100);
|
||||||
|
@ -9485,19 +9503,21 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
UUID key;
|
UUID key;
|
||||||
LandData land = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).LandData;
|
ILandObject land = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y);
|
||||||
if (land.OwnerID == m_host.OwnerID)
|
if (World.Permissions.CanEditParcelProperties(m_host.OwnerID, land, GroupPowers.LandManageAllowed))
|
||||||
{
|
{
|
||||||
if (UUID.TryParse(avatar, out key))
|
if (UUID.TryParse(avatar, out key))
|
||||||
{
|
{
|
||||||
foreach (ParcelManager.ParcelAccessEntry entry in land.ParcelAccessList)
|
int idx = land.LandData.ParcelAccessList.FindIndex(
|
||||||
{
|
delegate(ParcelManager.ParcelAccessEntry e)
|
||||||
if (entry.AgentID == key && entry.Flags == AccessList.Access)
|
{
|
||||||
{
|
if (e.AgentID == key && e.Flags == AccessList.Access)
|
||||||
land.ParcelAccessList.Remove(entry);
|
return true;
|
||||||
break;
|
return false;
|
||||||
}
|
});
|
||||||
}
|
|
||||||
|
if (idx != -1)
|
||||||
|
land.LandData.ParcelAccessList.RemoveAt(idx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ScriptSleep(100);
|
ScriptSleep(100);
|
||||||
|
@ -9507,19 +9527,21 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
UUID key;
|
UUID key;
|
||||||
LandData land = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).LandData;
|
ILandObject land = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y);
|
||||||
if (land.OwnerID == m_host.OwnerID)
|
if (World.Permissions.CanEditParcelProperties(m_host.OwnerID, land, GroupPowers.LandManageBanned))
|
||||||
{
|
{
|
||||||
if (UUID.TryParse(avatar, out key))
|
if (UUID.TryParse(avatar, out key))
|
||||||
{
|
{
|
||||||
foreach (ParcelManager.ParcelAccessEntry entry in land.ParcelAccessList)
|
int idx = land.LandData.ParcelAccessList.FindIndex(
|
||||||
{
|
delegate(ParcelManager.ParcelAccessEntry e)
|
||||||
if (entry.AgentID == key && entry.Flags == AccessList.Ban)
|
{
|
||||||
{
|
if (e.AgentID == key && e.Flags == AccessList.Ban)
|
||||||
land.ParcelAccessList.Remove(entry);
|
return true;
|
||||||
break;
|
return false;
|
||||||
}
|
});
|
||||||
}
|
|
||||||
|
if (idx != -1)
|
||||||
|
land.LandData.ParcelAccessList.RemoveAt(idx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ScriptSleep(100);
|
ScriptSleep(100);
|
||||||
|
|
|
@ -1335,7 +1335,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! World.Permissions.CanEditParcel(m_host.OwnerID, startLandObject))
|
if (!World.Permissions.CanEditParcelProperties(m_host.OwnerID, startLandObject, GroupPowers.LandOptions))
|
||||||
{
|
{
|
||||||
OSSLShoutError("You do not have permission to modify the parcel");
|
OSSLShoutError("You do not have permission to modify the parcel");
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -29,6 +29,7 @@ using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
|
using System.IO;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
|
@ -48,7 +49,7 @@ namespace OpenSim.Services.Connectors.Hypergrid
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
// private static UUID m_HGMapImage = new UUID("00000000-0000-1111-9999-000000000013");
|
private static UUID m_HGMapImage = new UUID("00000000-0000-1111-9999-000000000013");
|
||||||
|
|
||||||
private IAssetService m_AssetService;
|
private IAssetService m_AssetService;
|
||||||
|
|
||||||
|
@ -143,24 +144,25 @@ namespace OpenSim.Services.Connectors.Hypergrid
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
UUID m_MissingTexture = new UUID("5748decc-f629-461c-9a36-a35a221fe21f");
|
public UUID GetMapImage(UUID regionID, string imageURL, string storagePath)
|
||||||
|
|
||||||
public UUID GetMapImage(UUID regionID, string imageURL)
|
|
||||||
{
|
{
|
||||||
if (m_AssetService == null)
|
if (m_AssetService == null)
|
||||||
return m_MissingTexture;
|
return m_HGMapImage;
|
||||||
|
|
||||||
|
UUID mapTile = m_HGMapImage;
|
||||||
|
string filename = string.Empty;
|
||||||
|
Bitmap bitmap = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
||||||
WebClient c = new WebClient();
|
WebClient c = new WebClient();
|
||||||
//m_log.Debug("JPEG: " + imageURL);
|
//m_log.Debug("JPEG: " + imageURL);
|
||||||
string filename = regionID.ToString();
|
string name = regionID.ToString();
|
||||||
c.DownloadFile(imageURL, filename + ".jpg");
|
filename = Path.Combine(storagePath, name + ".jpg");
|
||||||
Bitmap m = new Bitmap(filename + ".jpg");
|
c.DownloadFile(imageURL, filename);
|
||||||
|
bitmap = new Bitmap(filename);
|
||||||
//m_log.Debug("Size: " + m.PhysicalDimension.Height + "-" + m.PhysicalDimension.Width);
|
//m_log.Debug("Size: " + m.PhysicalDimension.Height + "-" + m.PhysicalDimension.Width);
|
||||||
byte[] imageData = OpenJPEG.EncodeFromImage(m, true);
|
byte[] imageData = OpenJPEG.EncodeFromImage(bitmap, true);
|
||||||
AssetBase ass = new AssetBase(UUID.Random(), "region " + filename, (sbyte)AssetType.Texture, regionID.ToString());
|
AssetBase ass = new AssetBase(UUID.Random(), "region " + name, (sbyte)AssetType.Texture, regionID.ToString());
|
||||||
|
|
||||||
// !!! for now
|
// !!! for now
|
||||||
//info.RegionSettings.TerrainImageID = ass.FullID;
|
//info.RegionSettings.TerrainImageID = ass.FullID;
|
||||||
|
@ -172,14 +174,13 @@ namespace OpenSim.Services.Connectors.Hypergrid
|
||||||
m_AssetService.Store(ass);
|
m_AssetService.Store(ass);
|
||||||
|
|
||||||
// finally
|
// finally
|
||||||
return ass.FullID;
|
mapTile = ass.FullID;
|
||||||
|
|
||||||
}
|
}
|
||||||
catch // LEGIT: Catching problems caused by OpenJPEG p/invoke
|
catch // LEGIT: Catching problems caused by OpenJPEG p/invoke
|
||||||
{
|
{
|
||||||
m_log.Warn("[GATEKEEPER SERVICE CONNECTOR]: Failed getting/storing map image, because it is probably already in the cache");
|
m_log.Info("[GATEKEEPER SERVICE CONNECTOR]: Failed getting/storing map image, because it is probably already in the cache");
|
||||||
}
|
}
|
||||||
return UUID.Zero;
|
return mapTile;
|
||||||
}
|
}
|
||||||
|
|
||||||
public GridRegion GetHyperlinkRegion(GridRegion gatekeeper, UUID regionID)
|
public GridRegion GetHyperlinkRegion(GridRegion gatekeeper, UUID regionID)
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
@ -52,8 +53,6 @@ namespace OpenSim.Services.GridService
|
||||||
LogManager.GetLogger(
|
LogManager.GetLogger(
|
||||||
MethodBase.GetCurrentMethod().DeclaringType);
|
MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private static UUID m_HGMapImage = new UUID("00000000-0000-1111-9999-000000000013");
|
|
||||||
|
|
||||||
private static uint m_autoMappingX = 0;
|
private static uint m_autoMappingX = 0;
|
||||||
private static uint m_autoMappingY = 0;
|
private static uint m_autoMappingY = 0;
|
||||||
private static bool m_enableAutoMapping = false;
|
private static bool m_enableAutoMapping = false;
|
||||||
|
@ -65,6 +64,7 @@ namespace OpenSim.Services.GridService
|
||||||
|
|
||||||
protected UUID m_ScopeID = UUID.Zero;
|
protected UUID m_ScopeID = UUID.Zero;
|
||||||
protected bool m_Check4096 = true;
|
protected bool m_Check4096 = true;
|
||||||
|
protected string m_MapTileDirectory = string.Empty;
|
||||||
|
|
||||||
// Hyperlink regions are hyperlinks on the map
|
// Hyperlink regions are hyperlinks on the map
|
||||||
public readonly Dictionary<UUID, GridRegion> m_HyperlinkRegions = new Dictionary<UUID, GridRegion>();
|
public readonly Dictionary<UUID, GridRegion> m_HyperlinkRegions = new Dictionary<UUID, GridRegion>();
|
||||||
|
@ -121,9 +121,24 @@ namespace OpenSim.Services.GridService
|
||||||
|
|
||||||
m_Check4096 = gridConfig.GetBoolean("Check4096", true);
|
m_Check4096 = gridConfig.GetBoolean("Check4096", true);
|
||||||
|
|
||||||
|
m_MapTileDirectory = gridConfig.GetString("MapTileDirectory", string.Empty);
|
||||||
|
|
||||||
m_GatekeeperConnector = new GatekeeperServiceConnector(m_AssetService);
|
m_GatekeeperConnector = new GatekeeperServiceConnector(m_AssetService);
|
||||||
|
|
||||||
m_log.DebugFormat("[HYPERGRID LINKER]: Loaded all services...");
|
m_log.Debug("[HYPERGRID LINKER]: Loaded all services...");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(m_MapTileDirectory))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(m_MapTileDirectory);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
m_log.WarnFormat("[HYPERGRID LINKER]: Could not create map tile storage directory {0}: {1}", m_MapTileDirectory, e);
|
||||||
|
m_MapTileDirectory = string.Empty;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (MainConsole.Instance != null)
|
if (MainConsole.Instance != null)
|
||||||
|
@ -271,42 +286,22 @@ namespace OpenSim.Services.GridService
|
||||||
if (!m_GatekeeperConnector.LinkRegion(regInfo, out regionID, out handle, out externalName, out imageURL, out reason))
|
if (!m_GatekeeperConnector.LinkRegion(regInfo, out regionID, out handle, out externalName, out imageURL, out reason))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (regionID != UUID.Zero)
|
if (regionID == UUID.Zero)
|
||||||
{
|
|
||||||
region = m_GridService.GetRegionByUUID(scopeID, regionID);
|
|
||||||
if (region != null)
|
|
||||||
{
|
|
||||||
m_log.DebugFormat("[HYPERGRID LINKER]: Region already exists in coordinates {0} {1}",
|
|
||||||
region.RegionLocX / Constants.RegionSize, region.RegionLocY / Constants.RegionSize);
|
|
||||||
regInfo = region;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
regInfo.RegionID = regionID;
|
|
||||||
|
|
||||||
if ( externalName == string.Empty )
|
|
||||||
regInfo.RegionName = regInfo.ServerURI;
|
|
||||||
else
|
|
||||||
regInfo.RegionName = externalName;
|
|
||||||
|
|
||||||
m_log.Debug("[HYPERGRID LINKER]: naming linked region " + regInfo.RegionName);
|
|
||||||
|
|
||||||
// Try get the map image
|
|
||||||
//regInfo.TerrainImage = m_GatekeeperConnector.GetMapImage(regionID, imageURL);
|
|
||||||
// I need a texture that works for this... the one I tried doesn't seem to be working
|
|
||||||
regInfo.TerrainImage = m_HGMapImage;
|
|
||||||
|
|
||||||
AddHyperlinkRegion(regInfo, handle);
|
|
||||||
m_log.Info("[HYPERGRID LINKER]: Successfully linked to region_uuid " + regInfo.RegionID);
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
m_log.Warn("[HYPERGRID LINKER]: Unable to link region");
|
m_log.Warn("[HYPERGRID LINKER]: Unable to link region");
|
||||||
reason = "Remote region could not be found";
|
reason = "Remote region could not be found";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
region = m_GridService.GetRegionByUUID(scopeID, regionID);
|
||||||
|
if (region != null)
|
||||||
|
{
|
||||||
|
m_log.DebugFormat("[HYPERGRID LINKER]: Region already exists in coordinates {0} {1}",
|
||||||
|
region.RegionLocX / Constants.RegionSize, region.RegionLocY / Constants.RegionSize);
|
||||||
|
regInfo = region;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
uint x, y;
|
uint x, y;
|
||||||
if (m_Check4096 && !Check4096(handle, out x, out y))
|
if (m_Check4096 && !Check4096(handle, out x, out y))
|
||||||
{
|
{
|
||||||
|
@ -316,7 +311,20 @@ namespace OpenSim.Services.GridService
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_log.Debug("[HYPERGRID LINKER]: link region succeeded");
|
regInfo.RegionID = regionID;
|
||||||
|
|
||||||
|
if ( externalName == string.Empty )
|
||||||
|
regInfo.RegionName = regInfo.ServerURI;
|
||||||
|
else
|
||||||
|
regInfo.RegionName = externalName;
|
||||||
|
|
||||||
|
m_log.Debug("[HYPERGRID LINKER]: naming linked region " + regInfo.RegionName);
|
||||||
|
|
||||||
|
// Get the map image
|
||||||
|
regInfo.TerrainImage = m_GatekeeperConnector.GetMapImage(regionID, imageURL, m_MapTileDirectory);
|
||||||
|
|
||||||
|
AddHyperlinkRegion(regInfo, handle);
|
||||||
|
m_log.Info("[HYPERGRID LINKER]: Successfully linked to region_uuid " + regInfo.RegionID);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -123,42 +123,39 @@ namespace OpenSim.Services.HypergridService
|
||||||
externalName = m_ExternalName + ((regionName != string.Empty) ? " " + regionName : "");
|
externalName = m_ExternalName + ((regionName != string.Empty) ? " " + regionName : "");
|
||||||
imageURL = string.Empty;
|
imageURL = string.Empty;
|
||||||
reason = string.Empty;
|
reason = string.Empty;
|
||||||
|
GridRegion region = null;
|
||||||
|
|
||||||
m_log.DebugFormat("[GATEKEEPER SERVICE]: Request to link to {0}", (regionName == string.Empty)? "default region" : regionName);
|
m_log.DebugFormat("[GATEKEEPER SERVICE]: Request to link to {0}", (regionName == string.Empty)? "default region" : regionName);
|
||||||
if (!m_AllowTeleportsToAnyRegion || regionName == string.Empty)
|
if (!m_AllowTeleportsToAnyRegion || regionName == string.Empty)
|
||||||
{
|
{
|
||||||
List<GridRegion> defs = m_GridService.GetDefaultRegions(m_ScopeID);
|
List<GridRegion> defs = m_GridService.GetDefaultRegions(m_ScopeID);
|
||||||
if (defs != null && defs.Count > 0)
|
if (defs != null && defs.Count > 0)
|
||||||
m_DefaultGatewayRegion = defs[0];
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
{
|
||||||
regionID = m_DefaultGatewayRegion.RegionID;
|
region = defs[0];
|
||||||
regionHandle = m_DefaultGatewayRegion.RegionHandle;
|
m_DefaultGatewayRegion = region;
|
||||||
}
|
}
|
||||||
catch
|
else
|
||||||
{
|
{
|
||||||
reason = "Grid setup problem. Try specifying a particular region here.";
|
reason = "Grid setup problem. Try specifying a particular region here.";
|
||||||
m_log.DebugFormat("[GATEKEEPER SERVICE]: Unable to send information. Please specify a default region for this grid!");
|
m_log.DebugFormat("[GATEKEEPER SERVICE]: Unable to send information. Please specify a default region for this grid!");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
GridRegion region = m_GridService.GetRegionByName(m_ScopeID, regionName);
|
|
||||||
if (region == null)
|
|
||||||
{
|
{
|
||||||
reason = "Region not found";
|
region = m_GridService.GetRegionByName(m_ScopeID, regionName);
|
||||||
return false;
|
if (region == null)
|
||||||
|
{
|
||||||
|
reason = "Region not found";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
regionID = region.RegionID;
|
regionID = region.RegionID;
|
||||||
regionHandle = region.RegionHandle;
|
regionHandle = region.RegionHandle;
|
||||||
string regionimage = "regionImage" + region.RegionID.ToString();
|
|
||||||
regionimage = regionimage.Replace("-", "");
|
|
||||||
|
|
||||||
|
string regionimage = "regionImage" + regionID.ToString();
|
||||||
|
regionimage = regionimage.Replace("-", "");
|
||||||
imageURL = region.ServerURI + "index.php?method=" + regionimage;
|
imageURL = region.ServerURI + "index.php?method=" + regionimage;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -68,6 +68,12 @@ ServiceConnectors = "8003/OpenSim.Server.Handlers.dll:AssetServiceConnector,8003
|
||||||
;; Perform distance check for the creation of a linked region
|
;; Perform distance check for the creation of a linked region
|
||||||
; Check4096 = "True"
|
; Check4096 = "True"
|
||||||
|
|
||||||
|
;; Needed to display non-default map tile images for linked regions
|
||||||
|
AssetService = "OpenSim.Services.AssetService.dll:AssetService"
|
||||||
|
|
||||||
|
;; Directory for map tile images of linked regions
|
||||||
|
; MapTileDirectory = "./"
|
||||||
|
|
||||||
;; Next, we can specify properties of regions, including default and fallback regions
|
;; Next, we can specify properties of regions, including default and fallback regions
|
||||||
;; The syntax is: Region_<RegionName> = "<flags>"
|
;; The syntax is: Region_<RegionName> = "<flags>"
|
||||||
;; or: Region_<RegionID> = "<flags>"
|
;; or: Region_<RegionID> = "<flags>"
|
||||||
|
|
|
@ -42,6 +42,9 @@
|
||||||
GridServerURI = "http://mygridserver.com:8003"
|
GridServerURI = "http://mygridserver.com:8003"
|
||||||
;AllowHypergridMapSearch = true
|
;AllowHypergridMapSearch = true
|
||||||
|
|
||||||
|
;; Directory for map tile images of linked regions
|
||||||
|
; MapTileDirectory = "./"
|
||||||
|
|
||||||
[AvatarService]
|
[AvatarService]
|
||||||
;
|
;
|
||||||
; change this to your grid-wide grid server
|
; change this to your grid-wide grid server
|
||||||
|
|
|
@ -44,12 +44,15 @@
|
||||||
LocalGridInventoryService = "OpenSim.Region.CoreModules.dll:RemoteXInventoryServicesConnector"
|
LocalGridInventoryService = "OpenSim.Region.CoreModules.dll:RemoteXInventoryServicesConnector"
|
||||||
|
|
||||||
[GridService]
|
[GridService]
|
||||||
; RemoteGridServicesConnector instantiates a LocalGridServicesConnector,
|
; RemoteGridServicesConnector instantiates a LocalGridServicesConnector,
|
||||||
; which in turn uses this
|
; which in turn uses this
|
||||||
LocalServiceModule = "OpenSim.Services.GridService.dll:GridService"
|
LocalServiceModule = "OpenSim.Services.GridService.dll:GridService"
|
||||||
StorageProvider = "OpenSim.Data.Null.dll:NullRegionData"
|
StorageProvider = "OpenSim.Data.Null.dll:NullRegionData"
|
||||||
|
|
||||||
AllowHypergridMapSearch = true
|
; Needed to display non-default map tile images for linked regions
|
||||||
|
AssetService = "OpenSim.Services.Connectors.dll:AssetServicesConnector"
|
||||||
|
|
||||||
|
AllowHypergridMapSearch = true
|
||||||
|
|
||||||
[LibraryService]
|
[LibraryService]
|
||||||
LocalServiceModule = "OpenSim.Services.InventoryService.dll:LibraryService"
|
LocalServiceModule = "OpenSim.Services.InventoryService.dll:LibraryService"
|
||||||
|
|
|
@ -65,6 +65,9 @@
|
||||||
;; With hypergrid, perform distance check for the creation of a linked region
|
;; With hypergrid, perform distance check for the creation of a linked region
|
||||||
; Check4096 = true
|
; Check4096 = true
|
||||||
|
|
||||||
|
;; Directory for map tile images of remote regions
|
||||||
|
; MapTileDirectory = "./"
|
||||||
|
|
||||||
;; Next, we can specify properties of regions, including default and fallback regions
|
;; Next, we can specify properties of regions, including default and fallback regions
|
||||||
;; The syntax is: Region_<RegioName> = "<flags>"
|
;; The syntax is: Region_<RegioName> = "<flags>"
|
||||||
;; where <flags> can be DefaultRegion, FallbackRegion, NoDirectLogin, Persistent, LockedOut
|
;; where <flags> can be DefaultRegion, FallbackRegion, NoDirectLogin, Persistent, LockedOut
|
||||||
|
|
|
@ -65,12 +65,15 @@
|
||||||
LocalServiceModule = "OpenSim.Services.AuthenticationService.dll:PasswordAuthenticationService"
|
LocalServiceModule = "OpenSim.Services.AuthenticationService.dll:PasswordAuthenticationService"
|
||||||
|
|
||||||
[GridService]
|
[GridService]
|
||||||
; LocalGridServicesConnector needs this
|
; LocalGridServicesConnector needs this
|
||||||
LocalServiceModule = "OpenSim.Services.GridService.dll:GridService"
|
LocalServiceModule = "OpenSim.Services.GridService.dll:GridService"
|
||||||
Realm = "regions"
|
Realm = "regions"
|
||||||
StorageProvider = "OpenSim.Data.Null.dll"
|
StorageProvider = "OpenSim.Data.Null.dll"
|
||||||
|
|
||||||
AllowHypergridMapSearch = true
|
; Needed to display non-default map tile images for remote regions
|
||||||
|
AssetService = "OpenSim.Services.AssetService.dll:AssetService"
|
||||||
|
|
||||||
|
AllowHypergridMapSearch = true
|
||||||
|
|
||||||
[PresenceService]
|
[PresenceService]
|
||||||
LocalServiceModule = "OpenSim.Services.PresenceService.dll:PresenceService"
|
LocalServiceModule = "OpenSim.Services.PresenceService.dll:PresenceService"
|
||||||
|
|
Loading…
Reference in New Issue