private void HandleLandStatRequest(int parcelID, uint reportType, uint requestFlags, string filter, IClientAPI remoteClient)
        {
            Dictionary <uint, float> SceneData = new Dictionary <uint, float>();
            List <UUID> uuidNameLookupList     = new List <UUID>();

            if (reportType == 1)
            {
                SceneData = m_scene.PhysicsScene.GetTopColliders();
            }
            else if (reportType == 0)
            {
                SceneData = m_scene.SceneGraph.GetTopScripts();
            }

            List <LandStatReportItem> SceneReport = new List <LandStatReportItem>();

            lock (SceneData)
            {
                foreach (uint obj in SceneData.Keys)
                {
                    SceneObjectPart prt = m_scene.GetSceneObjectPart(obj);
                    if (prt != null)
                    {
                        if (prt.ParentGroup != null)
                        {
                            SceneObjectGroup sog = prt.ParentGroup;
                            if (sog != null)
                            {
                                LandStatReportItem lsri = new LandStatReportItem();
                                lsri.LocationX   = sog.AbsolutePosition.X;
                                lsri.LocationY   = sog.AbsolutePosition.Y;
                                lsri.LocationZ   = sog.AbsolutePosition.Z;
                                lsri.Score       = SceneData[obj];
                                lsri.TaskID      = sog.UUID;
                                lsri.TaskLocalID = sog.LocalId;
                                lsri.TaskName    = sog.GetPartName(obj);
                                if (m_scene.CommsManager.UUIDNameCachedTest(sog.OwnerID))
                                {
                                    lsri.OwnerName = m_scene.CommsManager.UUIDNameRequestString(sog.OwnerID);
                                }
                                else
                                {
                                    lsri.OwnerName = "waiting";
                                    lock (uuidNameLookupList)
                                        uuidNameLookupList.Add(sog.OwnerID);
                                }

                                if (filter.Length != 0)
                                {
                                    if ((lsri.OwnerName.Contains(filter) || lsri.TaskName.Contains(filter)))
                                    {
                                    }
                                    else
                                    {
                                        continue;
                                    }
                                }

                                SceneReport.Add(lsri);
                            }
                        }
                    }
                }
            }
            remoteClient.SendLandStatReply(reportType, requestFlags, (uint)SceneReport.Count, SceneReport.ToArray());

            if (uuidNameLookupList.Count > 0)
            {
                LookupUUID(uuidNameLookupList);
            }
        }
        private void HandleLandStatRequest(int parcelID, uint reportType, uint requestFlags, string filter, IClientAPI remoteClient)
        {
            if (!m_scene.Permissions.CanIssueEstateCommand(remoteClient.AgentId, false))
                return;

            Dictionary<uint, float> SceneData = new Dictionary<uint,float>();
            
            if (reportType == (uint)OpenMetaverse.EstateTools.LandStatReportType.TopColliders)
            {
                SceneData = m_scene.PhysicsScene.GetTopColliders();
            }
            else if (reportType == (uint)OpenMetaverse.EstateTools.LandStatReportType.TopScripts)
            {
                IScriptModule scriptModule = m_scene.RequestModuleInterface<IScriptModule>();
                SceneData = scriptModule.GetTopScripts(m_scene.RegionInfo.RegionID);
            }

            List<LandStatReportItem> SceneReport = new List<LandStatReportItem>();
            lock (SceneData)
            {
                foreach (uint obj in SceneData.Keys)
                {
                    ISceneChildEntity prt = m_scene.GetSceneObjectPart (obj);
                    if (prt != null)
                    {
                        if (prt.ParentEntity != null)
                        {
                            ISceneEntity sog = prt.ParentEntity;
                            if (sog != null)
                            {
                                LandStatReportItem lsri = new LandStatReportItem();
                                lsri.Location = sog.AbsolutePosition;
                                lsri.Score = SceneData[obj];
                                lsri.TaskID = sog.UUID;
                                lsri.TaskLocalID = sog.LocalId;
                                lsri.TaskName = prt.Name;
                                lsri.TimeModified = sog.RootChild.Rezzed;
                                OpenSim.Services.Interfaces.UserAccount account = m_scene.UserAccountService.GetUserAccount(m_scene.RegionInfo.ScopeID, sog.OwnerID);
                                if (account != null)
                                    lsri.OwnerName = account.Name;
                                else
                                    lsri.OwnerName = "Unknown";

                                if (filter.Length != 0)
                                {
                                    //Its in the filter, don't check it
                                    if (requestFlags == 2) //Owner name
                                    {
                                        if (!lsri.OwnerName.Contains(filter))
                                            continue;
                                    }
                                    if (requestFlags == 4)//Object name
                                    {
                                        if (!lsri.TaskName.Contains(filter))
                                            continue;
                                    }
                                }

                                SceneReport.Add(lsri);
                            }
                        }
                    }

                }
            }
            remoteClient.SendLandStatReply(reportType, requestFlags, (uint)SceneReport.Count,SceneReport.ToArray());
        }