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 IDictionary<LLUUID, LLUUID> m_pendingOffers = new Dictionary<LLUUID, LLUUID>();
|
||||||
|
|
||||||
private List<Scene> m_Scenelist = new List<Scene>();
|
private List<Scene> m_Scenelist = new List<Scene>();
|
||||||
|
private Dictionary<LLUUID, Scene> m_AgentRegions = new Dictionary<LLUUID, Scene>();
|
||||||
|
|
||||||
#region IRegionModule Members
|
#region IRegionModule Members
|
||||||
|
|
||||||
|
@ -61,6 +62,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Inventory
|
||||||
scene.RegisterModuleInterface<IInventoryModule>(this);
|
scene.RegisterModuleInterface<IInventoryModule>(this);
|
||||||
|
|
||||||
scene.EventManager.OnNewClient += OnNewClient;
|
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());
|
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,9 +653,10 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
SendCloseChildAgentConnections(avatar.UUID,avatar.GetKnownRegionList());
|
SendCloseChildAgentConnections(avatar.UUID,avatar.GetKnownRegionList());
|
||||||
}
|
}
|
||||||
// if (teleport success) // seems to be always success here
|
// 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
|
// so the userinfo in UserProfileCache is not reliable any more, delete it
|
||||||
m_commsProvider.UserProfileCacheService.RemoveUser(avatar.UUID);
|
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);
|
m_log.InfoFormat("User {0} is going to another region, profile cache removed", avatar.UUID);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -606,6 +606,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void MakeRootAgent(LLVector3 pos, bool isFlying)
|
public void MakeRootAgent(LLVector3 pos, bool isFlying)
|
||||||
{
|
{
|
||||||
|
m_scene.SetRootAgentScene(m_uuid);
|
||||||
|
|
||||||
IAvatarFactory ava = m_scene.RequestModuleInterface<IAvatarFactory>();
|
IAvatarFactory ava = m_scene.RequestModuleInterface<IAvatarFactory>();
|
||||||
if (ava != null)
|
if (ava != null)
|
||||||
{
|
{
|
||||||
|
@ -2010,9 +2012,10 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
m_scene.SendKillObject(m_localId);
|
m_scene.SendKillObject(m_localId);
|
||||||
m_scene.NotifyMyCoarseLocationChange();
|
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
|
// so the userinfo in UserProfileCache is not reliable any more, delete it
|
||||||
m_scene.CommsManager.UserProfileCacheService.RemoveUser(UUID);
|
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);
|
m_log.InfoFormat("User {0} is going to another region, profile cache removed", UUID);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue