Fix thingd so that autoreturn also works when the user is not in the sim.

Also add experimental distance ordering for prims
0.6.0-stable
Melanie Thielker 2008-10-18 07:27:39 +00:00
parent efe3f3eb2a
commit 264eeffd02
4 changed files with 33 additions and 10 deletions

View File

@ -1618,19 +1618,17 @@ namespace OpenSim.Region.Environment.Scenes
{
string sceneObjectXml = objectGroup.ToXmlString();
CachedUserInfo userInfo =
CommsManager.UserProfileCacheService.GetUserDetails(
remoteClient.AgentId);
CachedUserInfo userInfo;
if (remoteClient == null)
{
userInfo = CommsManager.UserProfileCacheService.GetUserDetails(
objectGroup.RootPart.OwnerID);
objectGroup.RootPart.OwnerID);
}
else
{
userInfo = CommsManager.UserProfileCacheService.GetUserDetails(
remoteClient.AgentId);
remoteClient.AgentId);
}
if (userInfo != null)
@ -1648,9 +1646,22 @@ namespace OpenSim.Region.Environment.Scenes
(int)AssetType.LostAndFoundFolder);
if (folder != null)
{
folderID = folder.ID;
}
else
folderID = userInfo.RootFolder.ID;
{
if (userInfo.RootFolder != null)
{
folderID = userInfo.RootFolder.ID;
}
else
{
CommsManager.UserProfileCacheService.RequestInventoryForUser(objectGroup.RootPart.OwnerID);
m_log.WarnFormat("[SCENE] Can't find root folder for user, requesting inventory");
return;
}
}
}
AssetBase asset = CreateAsset(
@ -1677,7 +1688,7 @@ namespace OpenSim.Region.Environment.Scenes
item.InvType = (int)InventoryType.Object;
item.Folder = folderID;
if ((remoteClient.AgentId != objectGroup.RootPart.OwnerID) && ExternalChecks.ExternalChecksPropagatePermissions())
if (remoteClient != null && (remoteClient.AgentId != objectGroup.RootPart.OwnerID) && ExternalChecks.ExternalChecksPropagatePermissions())
{
uint perms=objectGroup.GetEffectivePermissions();
uint nextPerms=(perms & 7) << 13;
@ -1706,7 +1717,7 @@ namespace OpenSim.Region.Environment.Scenes
item.CreationDate = Util.UnixTimeSinceEpoch();
userInfo.AddItem(item);
if (item.Owner == remoteClient.AgentId)
if (remoteClient != null && item.Owner == remoteClient.AgentId)
{
remoteClient.SendInventoryItemCreateUpdate(item);
}

View File

@ -3385,6 +3385,12 @@ namespace OpenSim.Region.Environment.Scenes
// User needs to be logged into this sim
if (m_scenePresences.ContainsKey(agentID))
{
if (godLike == false)
{
m_scenePresences[agentID].GrantGodlikePowers(agentID, sessionID, token, godLike);
return;
}
// First check that this is the sim owner
if (ExternalChecks.ExternalChecksCanBeGodLike(agentID))
{

View File

@ -1009,7 +1009,7 @@ namespace OpenSim.Region.Environment.Scenes
// that they don't happen, otherwise the deleted objects will reappear
m_isDeleted = true;
DetachFromBackup();
// DetachFromBackup();
foreach (SceneObjectPart part in m_parts.Values)
{

View File

@ -580,7 +580,13 @@ namespace OpenSim.Region.Environment.Scenes
{
m_pendingObjects = new Queue<SceneObjectGroup>();
foreach (EntityBase e in m_scene.Entities.Values)
List<EntityBase> ents = new List<EntityBase>(m_scene.Entities.Values);
ents.Sort(delegate(EntityBase a, EntityBase b)
{
return Vector3.Distance(AbsolutePosition, a.AbsolutePosition).CompareTo(Vector3.Distance(AbsolutePosition, b.AbsolutePosition));
});
foreach (EntityBase e in ents)
if (e is SceneObjectGroup)
m_pendingObjects.Enqueue((SceneObjectGroup)e);
}