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(); string sceneObjectXml = objectGroup.ToXmlString();
CachedUserInfo userInfo = CachedUserInfo userInfo;
CommsManager.UserProfileCacheService.GetUserDetails(
remoteClient.AgentId);
if (remoteClient == null) if (remoteClient == null)
{ {
userInfo = CommsManager.UserProfileCacheService.GetUserDetails( userInfo = CommsManager.UserProfileCacheService.GetUserDetails(
objectGroup.RootPart.OwnerID); objectGroup.RootPart.OwnerID);
} }
else else
{ {
userInfo = CommsManager.UserProfileCacheService.GetUserDetails( userInfo = CommsManager.UserProfileCacheService.GetUserDetails(
remoteClient.AgentId); remoteClient.AgentId);
} }
if (userInfo != null) if (userInfo != null)
@ -1648,9 +1646,22 @@ namespace OpenSim.Region.Environment.Scenes
(int)AssetType.LostAndFoundFolder); (int)AssetType.LostAndFoundFolder);
if (folder != null) if (folder != null)
{
folderID = folder.ID; folderID = folder.ID;
}
else 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( AssetBase asset = CreateAsset(
@ -1677,7 +1688,7 @@ namespace OpenSim.Region.Environment.Scenes
item.InvType = (int)InventoryType.Object; item.InvType = (int)InventoryType.Object;
item.Folder = folderID; 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 perms=objectGroup.GetEffectivePermissions();
uint nextPerms=(perms & 7) << 13; uint nextPerms=(perms & 7) << 13;
@ -1706,7 +1717,7 @@ namespace OpenSim.Region.Environment.Scenes
item.CreationDate = Util.UnixTimeSinceEpoch(); item.CreationDate = Util.UnixTimeSinceEpoch();
userInfo.AddItem(item); userInfo.AddItem(item);
if (item.Owner == remoteClient.AgentId) if (remoteClient != null && item.Owner == remoteClient.AgentId)
{ {
remoteClient.SendInventoryItemCreateUpdate(item); remoteClient.SendInventoryItemCreateUpdate(item);
} }

View File

@ -3385,6 +3385,12 @@ namespace OpenSim.Region.Environment.Scenes
// User needs to be logged into this sim // User needs to be logged into this sim
if (m_scenePresences.ContainsKey(agentID)) 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 // First check that this is the sim owner
if (ExternalChecks.ExternalChecksCanBeGodLike(agentID)) 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 // that they don't happen, otherwise the deleted objects will reappear
m_isDeleted = true; m_isDeleted = true;
DetachFromBackup(); // DetachFromBackup();
foreach (SceneObjectPart part in m_parts.Values) foreach (SceneObjectPart part in m_parts.Values)
{ {

View File

@ -580,7 +580,13 @@ namespace OpenSim.Region.Environment.Scenes
{ {
m_pendingObjects = new Queue<SceneObjectGroup>(); 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) if (e is SceneObjectGroup)
m_pendingObjects.Enqueue((SceneObjectGroup)e); m_pendingObjects.Enqueue((SceneObjectGroup)e);
} }