diff --git a/OpenSim/Framework/PrimitiveBaseShape.cs b/OpenSim/Framework/PrimitiveBaseShape.cs index e43d6341cb..fe8f0205fa 100644 --- a/OpenSim/Framework/PrimitiveBaseShape.cs +++ b/OpenSim/Framework/PrimitiveBaseShape.cs @@ -1099,8 +1099,6 @@ namespace OpenSim.Framework prim.Sculpt = new Primitive.SculptData(); prim.Sculpt.Type = (OpenMetaverse.SculptType)this.SculptType; prim.Sculpt.SculptTexture = this.SculptTexture; - - return prim; } prim.PrimData.PathShearX = this.PathShearX < 128 ? (float)this.PathShearX * 0.01f : (float)(this.PathShearX - 256) * 0.01f; diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 2e15b86ec2..a430b1e709 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -1266,7 +1266,7 @@ namespace OpenSim.Region.Framework.Scenes // allocations, and there is no more work to be done until someone logs in GC.Collect(); - m_log.DebugFormat("[REGION]: Enabling Logins for {0}", RegionInfo.RegionName); + m_log.DebugFormat("[REGION]: Enabling logins for {0}", RegionInfo.RegionName); loginsdisabled = false; } } diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index bf2f3d3c9c..10b7d94524 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs @@ -2075,6 +2075,7 @@ namespace OpenSim.Region.Framework.Scenes { if (PhysActor != null) { + Vector3 newpos = new Vector3(PhysActor.Position.GetBytes(), 0); if (m_parentGroup.Scene.TestBorderCross(newpos, Cardinals.N) | m_parentGroup.Scene.TestBorderCross(newpos, Cardinals.S) | m_parentGroup.Scene.TestBorderCross(newpos, Cardinals.E) | m_parentGroup.Scene.TestBorderCross(newpos, Cardinals.W)) @@ -2082,6 +2083,7 @@ namespace OpenSim.Region.Framework.Scenes m_parentGroup.AbsolutePosition = newpos; return; } + //m_parentGroup.RootPart.m_groupPosition = newpos; } ScheduleTerseUpdate(); @@ -2393,6 +2395,7 @@ namespace OpenSim.Region.Framework.Scenes if (!RotationOffset.ApproxEquals(m_lastRotation, ROTATION_TOLERANCE) || !Acceleration.Equals(m_lastAcceleration) || !Velocity.ApproxEquals(m_lastVelocity, VELOCITY_TOLERANCE) || + Velocity.ApproxEquals(Vector3.Zero, VELOCITY_TOLERANCE) || !AngularVelocity.ApproxEquals(m_lastAngularVelocity, VELOCITY_TOLERANCE) || !OffsetPosition.ApproxEquals(m_lastPosition, POSITION_TOLERANCE) || Environment.TickCount - m_lastTerseSent > TIME_MS_TOLERANCE) @@ -2427,6 +2430,7 @@ namespace OpenSim.Region.Framework.Scenes m_updateFlag = 0; //Same here } } + ClearUpdateSchedule(); } /// diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 1dedcf18f8..424c25bafe 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -995,6 +995,8 @@ namespace OpenSim.Region.Framework.Scenes Animator.TrySetMovementAnimation("LAND"); SendFullUpdateToAllClients(); + ControllingClient.SendAvatarTerseUpdate(new SendAvatarTerseData(m_rootRegionHandle, (ushort)(m_scene.TimeDilation * ushort.MaxValue), LocalId, + AbsolutePosition, Velocity, -Vector3.UnitZ, m_bodyRot, Vector4.UnitW, m_uuid, null, GetUpdatePriority(ControllingClient))); } public void AddNeighbourRegion(ulong regionHandle, string cap) diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs index 2bf96e4cc3..c7e0848cc2 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs @@ -2416,6 +2416,9 @@ Console.WriteLine(" JointCreateFixed"); { // Averate previous velocity with the new one so // client object interpolation works a 'little' better + if (_zeroFlag) + return Vector3.Zero; + Vector3 returnVelocity = Vector3.Zero; returnVelocity.X = (m_lastVelocity.X + _velocity.X)/2; returnVelocity.Y = (m_lastVelocity.Y + _velocity.Y)/2; @@ -2702,7 +2705,7 @@ Console.WriteLine(" JointCreateFixed"); //outofBounds = true; } -// float Adiff = 1.0f - Math.Abs(Quaternion.Dot(m_lastorientation, l_orientation)); + //float Adiff = 1.0f - Math.Abs(Quaternion.Dot(m_lastorientation, l_orientation)); //Console.WriteLine("Adiff " + m_primName + " = " + Adiff); if ((Math.Abs(m_lastposition.X - l_position.X) < 0.02) && (Math.Abs(m_lastposition.Y - l_position.Y) < 0.02) @@ -2718,6 +2721,8 @@ Console.WriteLine(" JointCreateFixed"); { //m_log.Debug(Math.Abs(m_lastposition.X - l_position.X).ToString()); _zeroFlag = false; + m_lastUpdateSent = false; + //m_throttleUpdates = false; } if (_zeroFlag) @@ -2744,7 +2749,9 @@ Console.WriteLine(" JointCreateFixed"); m_rotationalVelocity = pv; if (_parent == null) + { base.RequestPhysicsterseUpdate(); + } m_lastUpdateSent = true; } @@ -2754,7 +2761,9 @@ Console.WriteLine(" JointCreateFixed"); if (lastZeroFlag != _zeroFlag) { if (_parent == null) + { base.RequestPhysicsterseUpdate(); + } } m_lastVelocity = _velocity; @@ -2787,7 +2796,9 @@ Console.WriteLine(" JointCreateFixed"); if (!m_throttleUpdates || throttleCounter > _parent_scene.geomUpdatesPerThrottledUpdate) { if (_parent == null) + { base.RequestPhysicsterseUpdate(); + } } else { diff --git a/OpenSim/Region/ScriptEngine/Shared/CodeTools/CSCodeGenerator.cs b/OpenSim/Region/ScriptEngine/Shared/CodeTools/CSCodeGenerator.cs index 41ecfd3c89..e427f50bac 100644 --- a/OpenSim/Region/ScriptEngine/Shared/CodeTools/CSCodeGenerator.cs +++ b/OpenSim/Region/ScriptEngine/Shared/CodeTools/CSCodeGenerator.cs @@ -722,8 +722,26 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools if (fls.kids.Top is IdentExpression && 1 == fls.kids.Count) return retstr; - foreach (SYMBOL s in fls.kids) + for (int i = 0; i < fls.kids.Count; i++) { + SYMBOL s = (SYMBOL)fls.kids[i]; + + // Statements surrounded by parentheses in for loops + // + // e.g. for ((i = 0), (j = 7); (i < 10); (++i)) + // + // are legal in LSL but not in C# so we need to discard the parentheses + // + // The following, however, does not appear to be legal in LLS + // + // for ((i = 0, j = 7); (i < 10); (++i)) + // + // As of Friday 20th November 2009, the Linden Lab simulators appear simply never to compile or run this + // script but with no debug or warnings at all! Therefore, we won't deal with this yet (which looks + // like it would be considerably more complicated to handle). + while (s is ParenthesisExpression) + s = (SYMBOL)s.kids.Pop(); + retstr += GenerateNode(s); if (0 < comma--) retstr += Generate(", ");