From bd9f6ae3f079afaf5de29055f5c6e666fa796914 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Thu, 7 Nov 2019 03:00:56 +0000 Subject: [PATCH] avoid a null ref --- .../Region/Framework/Scenes/ScenePresence.cs | 34 +++++++++++++------ 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 22ad3c0712..0761bbbd38 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -78,10 +78,12 @@ namespace OpenSim.Region.Framework.Scenes { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); -// ~ScenePresence() -// { -// m_log.DebugFormat("[SCENE PRESENCE]: Destructor called on {0}", Name); -// } + public int MaxNumberAttachments { get; } = 38; // per viewers limit + + // ~ScenePresence() + // { + // m_log.DebugFormat("[SCENE PRESENCE]: Destructor called on {0}", Name); + // } public void TriggerScenePresenceUpdated() { @@ -303,7 +305,11 @@ namespace OpenSim.Region.Framework.Scenes public bool Flying { get { return PhysicsActor != null && PhysicsActor.Flying; } - set { PhysicsActor.Flying = value; } + set + { + if(PhysicsActor != null) + PhysicsActor.Flying = value; + } } public bool IsColliding @@ -5406,6 +5412,12 @@ namespace OpenSim.Region.Framework.Scenes bakedModule.UpdateMeshAvatar(m_uuid); } + public int GetAttachmentsCount() + { + return m_attachments.Count; + } + + /// /// Get all the presence's attachments. /// @@ -6605,10 +6617,9 @@ namespace OpenSim.Region.Framework.Scenes if (m_lastColliders.Count == 0) return; // nothing to do - foreach (uint localID in m_lastColliders) - { - endedColliders.Add(localID); - } + for(int i = 0; i < m_lastColliders.Count; ++i) + endedColliders.Add(m_lastColliders[i]); + m_lastColliders.Clear(); } else @@ -6668,9 +6679,10 @@ namespace OpenSim.Region.Framework.Scenes if (soundinfolist.Count > 0) CollisionSounds.AvatarCollisionSound(this, soundinfolist); } - - foreach (SceneObjectGroup att in GetAttachments()) + List attachements = GetAttachments(); + for (int i = 0; i< attachements.Count; ++i) { + SceneObjectGroup att = attachements[i]; SendCollisionEvent(att, scriptEvents.collision_start, startedColliders, m_scene.EventManager.TriggerScriptCollidingStart); SendCollisionEvent(att, scriptEvents.collision , m_lastColliders , m_scene.EventManager.TriggerScriptColliding); SendCollisionEvent(att, scriptEvents.collision_end , endedColliders , m_scene.EventManager.TriggerScriptCollidingEnd);