From 8de1be746fefa6ff3950083ae36ddef03bb66548 Mon Sep 17 00:00:00 2001 From: Oren Hurvitz Date: Sun, 20 Jul 2014 18:53:11 +0300 Subject: [PATCH] Fixed: after a Hypergrid teleport, attachments often either disappear, or appear both on the avatar AND as in-world objects. Another manifestation of this bug is that after a Hypergrid teleport, when you click on one of the avatar's attachments the object doesn't show its name. This means that the viewer knows the attachment is there, but the simulator does not. The problem was caused by treating Hypergrid teleports as if they're Logins (because the teleport flag ViaLogin is enabled). This may fix: http://opensimulator.org/mantis/view.php?id=7238 This may fix: http://opensimulator.org/mantis/view.php?id=7220 --- .../Region/Framework/Scenes/ScenePresence.cs | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 493090cdfd..e478322a68 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -1192,19 +1192,17 @@ namespace OpenSim.Region.Framework.Scenes // and it has already rezzed the attachments and started their scripts. // We do the following only for non-login agents, because their scripts // haven't started yet. - if (PresenceType == PresenceType.Npc || (TeleportFlags & TeleportFlags.ViaLogin) != 0) + if (PresenceType == PresenceType.Npc || IsRealLogin(m_teleportFlags)) { // Viewers which have a current outfit folder will actually rez their own attachments. However, // viewers without (e.g. v1 viewers) will not, so we still need to make this call. if (Scene.AttachmentsModule != null) - Util.FireAndForget( - o => - { -// if (PresenceType != PresenceType.Npc && Util.FireAndForgetMethod != FireAndForgetMethod.None) -// System.Threading.Thread.Sleep(7000); - - Scene.AttachmentsModule.RezAttachments(this); - }); + { + Util.FireAndForget(o => + { + Scene.AttachmentsModule.RezAttachments(this); + }); + } } else { @@ -1266,6 +1264,11 @@ namespace OpenSim.Region.Framework.Scenes return true; } + private static bool IsRealLogin(TeleportFlags teleportFlags) + { + return ((teleportFlags & TeleportFlags.ViaLogin) != 0) && ((teleportFlags & TeleportFlags.ViaHGLogin) == 0); + } + /// /// Force viewers to show the avatar's current name. /// @@ -1697,7 +1700,7 @@ namespace OpenSim.Region.Framework.Scenes try { // Make sure it's not a login agent. We don't want to wait for updates during login - if (PresenceType != PresenceType.Npc && (m_teleportFlags & TeleportFlags.ViaLogin) == 0) + if (!(PresenceType == PresenceType.Npc || IsRealLogin(m_teleportFlags))) { // Let's wait until UpdateAgent (called by departing region) is done if (!WaitForUpdateAgent(client))