From 334d05db05772c61d8ebb9f697ee4219965943f1 Mon Sep 17 00:00:00 2001 From: Teravus Ovares Date: Fri, 30 May 2008 11:25:21 +0000 Subject: * Fixed a dangling event hook that I added. * Added a Non-finite avatar position reset. This will either handle the <0,0,0> avatar gracefully, or send the avatar to 127,127,127 if that also doesn't work. ( I've only been able to reproduce this error once on my development workstation ) --- OpenSim/Region/Environment/Scenes/EventManager.cs | 12 +++++++ OpenSim/Region/Environment/Scenes/ScenePresence.cs | 37 ++++++++++++++++++++++ 2 files changed, 49 insertions(+) (limited to 'OpenSim/Region/Environment/Scenes') diff --git a/OpenSim/Region/Environment/Scenes/EventManager.cs b/OpenSim/Region/Environment/Scenes/EventManager.cs index e77bebc..c7d21c8 100644 --- a/OpenSim/Region/Environment/Scenes/EventManager.cs +++ b/OpenSim/Region/Environment/Scenes/EventManager.cs @@ -180,6 +180,8 @@ namespace OpenSim.Region.Environment.Scenes public event ScriptTimerEvent OnScriptTimerEvent; + public delegate void EstateToolsTimeUpdate(ulong regionHandle, bool FixedTime, bool EstateSun, float LindenHour); + public event EstateToolsTimeUpdate OnEstateToolsTimeUpdate; public delegate void ObjectBeingRemovedFromScene(SceneObjectGroup obj); public event ObjectBeingRemovedFromScene OnObjectBeingRemovedFromScene; @@ -346,6 +348,7 @@ namespace OpenSim.Region.Environment.Scenes private ParcelPrimCountTainted handlerParcelPrimCountTainted = null; private ObjectBeingRemovedFromScene handlerObjectBeingRemovedFromScene = null; private ScriptTimerEvent handlerScriptTimerEvent = null; + private EstateToolsTimeUpdate handlerEstateToolsTimeUpdate = null; public void TriggerOnScriptChangedEvent(uint localID, uint change) { @@ -798,5 +801,14 @@ namespace OpenSim.Region.Environment.Scenes } } + + public void TriggerEstateToolsTimeUpdate(ulong regionHandle, bool FixedTime, bool useEstateTime, float LindenHour) + { + handlerEstateToolsTimeUpdate = OnEstateToolsTimeUpdate; + if (handlerEstateToolsTimeUpdate != null) + { + handlerEstateToolsTimeUpdate(regionHandle, FixedTime, useEstateTime, LindenHour); + } + } } } diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs index 96adbe7..30075da 100644 --- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs @@ -90,6 +90,9 @@ namespace OpenSim.Region.Environment.Scenes private short m_updateCount = 0; private uint m_requestedSitTargetID = 0; private LLVector3 m_requestedSitOffset = new LLVector3(); + + private LLVector3 m_LastFinitePos = new LLVector3(); + private float m_sitAvatarHeight = 2.0f; private float m_godlevel = 0; @@ -750,6 +753,40 @@ namespace OpenSim.Region.Environment.Scenes // Must check for standing up even when PhysicsActor is null, // since sitting currently removes avatar from physical scene + //m_log.Debug("agentPos:" + AbsolutePosition.ToString()); + + // This is irritating. Really. + if (!AbsolutePosition.IsFinite()) + { + RemoveFromPhysicalScene(); + m_log.Error("[AVATAR]: NonFinite Avatar position detected... Reset Position. Mantis this please. Error# 9999902"); + + m_pos = m_LastFinitePos; + if (!m_pos.IsFinite()) + { + m_pos.X = 127f; + m_pos.Y = 127f; + m_pos.Z = 127f; + m_log.Error("[AVATAR]: NonFinite Avatar position detected... Reset Position. Mantis this please. Error# 9999903"); + } + + AddToPhysicalScene(); + } + else + { + m_LastFinitePos = m_pos; + } + //m_physicsActor.AddForce(new PhysicsVector(999999999, 99999999, 999999999999999), true); + + + //ILandObject land = LandChannel.GetLandObject(agent.startpos.X, agent.startpos.Y); + //if (land != null) + //{ + //if (land.landData.landingType == (byte)1 && land.landData.userLocation != LLVector3.Zero) + //{ + // agent.startpos = land.landData.userLocation; + //} + //} m_perfMonMS = System.Environment.TickCount; -- cgit v1.1