Fix region crossings and access to inventory after changing regions within
the same simulator0.6.0-stable
parent
5c360e7374
commit
e5cdba1cb4
|
@ -49,6 +49,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Inventory
|
|||
private IDictionary<LLUUID, LLUUID> m_pendingOffers = new Dictionary<LLUUID, LLUUID>();
|
||||
|
||||
private List<Scene> m_Scenelist = new List<Scene>();
|
||||
private Dictionary<LLUUID, Scene> m_AgentRegions = new Dictionary<LLUUID, Scene>();
|
||||
|
||||
#region IRegionModule Members
|
||||
|
||||
|
@ -61,6 +62,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Inventory
|
|||
scene.RegisterModuleInterface<IInventoryModule>(this);
|
||||
|
||||
scene.EventManager.OnNewClient += OnNewClient;
|
||||
scene.EventManager.OnClientClosed += ClientLoggedOut;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -223,8 +225,28 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Inventory
|
|||
}
|
||||
}
|
||||
|
||||
// public void TestFunction()
|
||||
// {
|
||||
// }
|
||||
public void SetRootAgentScene(LLUUID agentID, Scene scene)
|
||||
{
|
||||
m_AgentRegions[agentID] = scene;
|
||||
}
|
||||
|
||||
public bool NeedSceneCacheClear(LLUUID agentID, Scene scene)
|
||||
{
|
||||
if (!m_AgentRegions.ContainsKey(agentID))
|
||||
return true;
|
||||
|
||||
if(m_AgentRegions[agentID] == scene)
|
||||
{
|
||||
m_AgentRegions.Remove(agentID);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void ClientLoggedOut(LLUUID agentID)
|
||||
{
|
||||
if (m_AgentRegions.ContainsKey(agentID))
|
||||
m_AgentRegions.Remove(agentID);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3860,5 +3860,22 @@ namespace OpenSim.Region.Environment.Scenes
|
|||
client.SendLayerData(patchX, patchY, Heightmap.GetFloatsSerialised());
|
||||
}
|
||||
|
||||
public void SetRootAgentScene(LLUUID agentID)
|
||||
{
|
||||
IInventoryModule inv = RequestModuleInterface<IInventoryModule>();
|
||||
if(inv == null)
|
||||
return;
|
||||
|
||||
inv.SetRootAgentScene(agentID, this);
|
||||
}
|
||||
|
||||
public bool NeedSceneCacheClear(LLUUID agentID)
|
||||
{
|
||||
IInventoryModule inv = RequestModuleInterface<IInventoryModule>();
|
||||
if(inv == null)
|
||||
return true;
|
||||
|
||||
return inv.NeedSceneCacheClear(agentID, this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -653,8 +653,9 @@ namespace OpenSim.Region.Environment.Scenes
|
|||
SendCloseChildAgentConnections(avatar.UUID,avatar.GetKnownRegionList());
|
||||
}
|
||||
// if (teleport success) // seems to be always success here
|
||||
// the user may change thier profile information in other region,
|
||||
// the user may change their profile information in other region,
|
||||
// so the userinfo in UserProfileCache is not reliable any more, delete it
|
||||
if (avatar.Scene.NeedSceneCacheClear(avatar.UUID))
|
||||
m_commsProvider.UserProfileCacheService.RemoveUser(avatar.UUID);
|
||||
m_log.InfoFormat("User {0} is going to another region, profile cache removed", avatar.UUID);
|
||||
}
|
||||
|
|
|
@ -606,6 +606,8 @@ namespace OpenSim.Region.Environment.Scenes
|
|||
/// </summary>
|
||||
public void MakeRootAgent(LLVector3 pos, bool isFlying)
|
||||
{
|
||||
m_scene.SetRootAgentScene(m_uuid);
|
||||
|
||||
IAvatarFactory ava = m_scene.RequestModuleInterface<IAvatarFactory>();
|
||||
if (ava != null)
|
||||
{
|
||||
|
@ -2010,8 +2012,9 @@ namespace OpenSim.Region.Environment.Scenes
|
|||
|
||||
m_scene.SendKillObject(m_localId);
|
||||
m_scene.NotifyMyCoarseLocationChange();
|
||||
// the user may change thier profile information in other region,
|
||||
// the user may change their profile information in other region,
|
||||
// so the userinfo in UserProfileCache is not reliable any more, delete it
|
||||
if(m_scene.NeedSceneCacheClear(UUID))
|
||||
m_scene.CommsManager.UserProfileCacheService.RemoveUser(UUID);
|
||||
m_log.InfoFormat("User {0} is going to another region, profile cache removed", UUID);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue