Esempio n. 1
0
        void ParcelPropertiesRequestHandler(Packet packet, Agent agent)
        {
            ParcelPropertiesRequestPacket request = (ParcelPropertiesRequestPacket)packet;

            // TODO: Replace with HashSet when we switch to .NET 3.5
            List <int> parcels = new List <int>();

            // Convert the boundaries to integers
            int north = (int)Math.Round(request.ParcelData.North) / 4;
            int east  = (int)Math.Round(request.ParcelData.East) / 4;
            int south = (int)Math.Round(request.ParcelData.South) / 4;
            int west  = (int)Math.Round(request.ParcelData.West) / 4;

            // Find all of the parcels within the given boundaries
            int xLen = east - west;
            int yLen = north - south;

            for (int x = 0; x < xLen; x++)
            {
                for (int y = 0; y < yLen; y++)
                {
                    if (west + x < 64 && south + y < 64)
                    {
                        int currentParcelID = parcelOverlay[(south + y) * 64 + (west + x)];
                        if (!parcels.Contains(currentParcelID))
                        {
                            parcels.Add(currentParcelID);
                        }
                    }
                }
            }

            ParcelResult result = ParcelResult.NoData;

            if (parcels.Count == 1)
            {
                result = ParcelResult.Single;
            }
            else if (parcels.Count > 1)
            {
                result = ParcelResult.Multiple;
            }

            for (int i = 0; i < parcels.Count; i++)
            {
                SendParcelProperties(parcels[i], request.ParcelData.SequenceID, request.ParcelData.SnapSelection, result, agent);
            }
        }
Esempio n. 2
0
        private void ParcelPropertiesRequestHandler(Packet packet, LLAgent agent)
        {
            ParcelPropertiesRequestPacket request = (ParcelPropertiesRequestPacket)packet;

            HashSet <int> parcels = new HashSet <int>();

            // Convert the boundaries to integers
            int north = (int)Math.Round(request.ParcelData.North) / 4;
            int east  = (int)Math.Round(request.ParcelData.East) / 4;
            int south = (int)Math.Round(request.ParcelData.South) / 4;
            int west  = (int)Math.Round(request.ParcelData.West) / 4;

            // Find all of the parcels within the given boundaries
            int xLen = east - west;
            int yLen = north - south;

            for (int x = 0; x < xLen; x++)
            {
                for (int y = 0; y < yLen; y++)
                {
                    if (west + x < 64 && south + y < 64)
                    {
                        int currentParcelID = m_parcels.GetParcelID(west + x, south + y);
                        if (!parcels.Contains(currentParcelID))
                        {
                            parcels.Add(currentParcelID);
                        }
                    }
                }
            }

            ParcelResult result = ParcelResult.NoData;

            if (parcels.Count == 1)
            {
                result = ParcelResult.Single;
            }
            else if (parcels.Count > 1)
            {
                result = ParcelResult.Multiple;
            }

            foreach (int parcelID in parcels)
            {
                SendParcelProperties(parcelID, request.ParcelData.SequenceID, request.ParcelData.SnapSelection, result, agent);
            }
        }
        /// <summary>
        /// Deserialize the message
        /// </summary>
        /// <param name="map">An <see cref="OSDMap"/> containing the data</param>
        public void Deserialize(OSDMap map)
        {
            OSDMap parcelDataMap = (OSDMap)((OSDArray)map["ParcelData"])[0];
            LocalID = parcelDataMap["LocalID"].AsInteger();
            AABBMax = parcelDataMap["AABBMax"].AsVector3();
            AABBMin = parcelDataMap["AABBMin"].AsVector3();
            Area = parcelDataMap["Area"].AsInteger();
            AuctionID = (uint)parcelDataMap["AuctionID"].AsInteger();
            AuthBuyerID = parcelDataMap["AuthBuyerID"].AsUUID();
            Bitmap = parcelDataMap["Bitmap"].AsBinary();
            Category = (ParcelCategory)parcelDataMap["Category"].AsInteger();
            ClaimDate = Utils.UnixTimeToDateTime((uint)parcelDataMap["ClaimDate"].AsInteger());
            ClaimPrice = parcelDataMap["ClaimPrice"].AsInteger();
            Desc = parcelDataMap["Desc"].AsString();

            // LL sends this as binary, we'll convert it here
            if (parcelDataMap["ParcelFlags"].Type == OSDType.Binary)
            {
                byte[] bytes = parcelDataMap["ParcelFlags"].AsBinary();
                if (BitConverter.IsLittleEndian)
                    Array.Reverse(bytes);
                ParcelFlags = (ParcelFlags)BitConverter.ToUInt32(bytes, 0);
            }
            else
            {
                ParcelFlags = (ParcelFlags)parcelDataMap["ParcelFlags"].AsUInteger();
            }
            GroupID = parcelDataMap["GroupID"].AsUUID();
            GroupPrims = parcelDataMap["GroupPrims"].AsInteger();
            IsGroupOwned = parcelDataMap["IsGroupOwned"].AsBoolean();
            LandingType = (LandingType)parcelDataMap["LandingType"].AsInteger();
            MaxPrims = parcelDataMap["MaxPrims"].AsInteger();
            MediaID = parcelDataMap["MediaID"].AsUUID();
            MediaURL = parcelDataMap["MediaURL"].AsString();
            MediaAutoScale = parcelDataMap["MediaAutoScale"].AsBoolean(); // 0x1 = yes
            MusicURL = parcelDataMap["MusicURL"].AsString();
            Name = parcelDataMap["Name"].AsString();
            OtherCleanTime = parcelDataMap["OtherCleanTime"].AsInteger();
            OtherCount = parcelDataMap["OtherCount"].AsInteger();
            OtherPrims = parcelDataMap["OtherPrims"].AsInteger();
            OwnerID = parcelDataMap["OwnerID"].AsUUID();
            OwnerPrims = parcelDataMap["OwnerPrims"].AsInteger();
            ParcelPrimBonus = (float)parcelDataMap["ParcelPrimBonus"].AsReal();
            PassHours = (float)parcelDataMap["PassHours"].AsReal();
            PassPrice = parcelDataMap["PassPrice"].AsInteger();
            PublicCount = parcelDataMap["PublicCount"].AsInteger();
            Privacy = parcelDataMap["Privacy"].AsBoolean();
            RegionDenyAnonymous = parcelDataMap["RegionDenyAnonymous"].AsBoolean();
            RegionDenyIdentified = parcelDataMap["RegionDenyIdentified"].AsBoolean();
            RegionDenyTransacted = parcelDataMap["RegionDenyTransacted"].AsBoolean();
            RegionPushOverride = parcelDataMap["RegionPushOverride"].AsBoolean();
            RentPrice = parcelDataMap["RentPrice"].AsInteger();
            RequestResult = (ParcelResult)parcelDataMap["RequestResult"].AsInteger();
            SalePrice = parcelDataMap["SalePrice"].AsInteger();
            SelectedPrims = parcelDataMap["SelectedPrims"].AsInteger();
            SelfCount = parcelDataMap["SelfCount"].AsInteger();
            SequenceID = parcelDataMap["SequenceID"].AsInteger();
            SimWideMaxPrims = parcelDataMap["SimWideMaxPrims"].AsInteger();
            SimWideTotalPrims = parcelDataMap["SimWideTotalPrims"].AsInteger();
            SnapSelection = parcelDataMap["SnapSelection"].AsBoolean();
            SnapshotID = parcelDataMap["SnapshotID"].AsUUID();
            Status = (ParcelStatus)parcelDataMap["Status"].AsInteger();
            TotalPrims = parcelDataMap["TotalPrims"].AsInteger();
            UserLocation = parcelDataMap["UserLocation"].AsVector3();
            UserLookAt = parcelDataMap["UserLookAt"].AsVector3();

            if (map.ContainsKey("MediaData")) // temporary, OpenSim doesn't send this block
            {
                OSDMap mediaDataMap = (OSDMap)((OSDArray)map["MediaData"])[0];
                MediaDesc = mediaDataMap["MediaDesc"].AsString();
                MediaHeight = mediaDataMap["MediaHeight"].AsInteger();
                MediaWidth = mediaDataMap["MediaWidth"].AsInteger();
                MediaLoop = mediaDataMap["MediaLoop"].AsBoolean();
                MediaType = mediaDataMap["MediaType"].AsString();
                ObscureMedia = mediaDataMap["ObscureMedia"].AsBoolean();
                ObscureMusic = mediaDataMap["ObscureMusic"].AsBoolean();
            }

            OSDMap ageVerificationBlockMap = (OSDMap)((OSDArray)map["AgeVerificationBlock"])[0];
            RegionDenyAgeUnverified = ageVerificationBlockMap["RegionDenyAgeUnverified"].AsBoolean();
        }
Esempio n. 4
0
 /// <summary>
 /// Construct a new instance of the ParcelPropertiesEventArgs class
 /// </summary>
 /// <param name="simulator">The <see cref="Parcel"/> object containing the details</param>
 /// <param name="parcel">The <see cref="Parcel"/> object containing the details</param>
 /// <param name="result">The result of the request</param>
 /// <param name="selectedPrims">The number of primitieves your agent is 
 /// currently selecting and or sitting on in this parcel</param>
 /// <param name="sequenceID">The user assigned ID used to correlate a request with
 /// these results</param>
 /// <param name="snapSelection">TODO:</param>
 public ParcelPropertiesEventArgs(Simulator simulator, Parcel parcel, ParcelResult result, int selectedPrims,
     int sequenceID, bool snapSelection)
 {
     this.m_Simulator = simulator;
     this.m_Parcel = parcel;
     this.m_Result = result;
     this.m_SelectedPrims = selectedPrims;
     this.m_SequenceID = sequenceID;
     this.m_SnapSelection = snapSelection;
 }
Esempio n. 5
0
 private void Parcels_OnParcelProperties(Simulator simulator, Parcel parcel, ParcelResult result, int selectedPrims, int sequenceID, bool snapSelection)
 {
     string pcl = parcel.Name;
     //this.parcel = parcel;
     //BeginInvoke(new MethodInvoker(UpdateLand));
 }
Esempio n. 6
0
        private void Parcels_OnParcelProperties(Simulator simulator, Parcel parcel, ParcelResult result,
                                                int selectedPrims, int sequenceID, bool snapSelection)
        {
            // Check if this is for a simulator we're concerned with
            if (!active_sims.Contains(simulator))
            {
                return;
            }

            // Warn about parcel property request errors and bail out
            if (result == ParcelResult.NoData)
            {
                Logger.Log("ParcelDownloader received a NoData response, sequenceID " + sequenceID,
                           Helpers.LogLevel.Warning, Client);
                return;
            }

            // Warn about unexpected data and bail out
            if (!ParcelMarked.ContainsKey(simulator))
            {
                Logger.Log("ParcelDownloader received unexpected parcel data for " + simulator,
                           Helpers.LogLevel.Warning, Client);
                return;
            }

            int x, y, index, bit;

            int[,] markers = ParcelMarked[simulator];

            // Add this parcel to the dictionary of LocalID -> Parcel mappings
            lock (Parcels[simulator])
                if (!Parcels[simulator].ContainsKey(parcel.LocalID))
                {
                    Parcels[simulator][parcel.LocalID] = parcel;
                }

            // Request the access list for this parcel
            Client.Parcels.AccessListRequest(simulator, parcel.LocalID,
                                             AccessList.Both, 0);

            // Mark this area as downloaded
            for (y = 0; y < 64; y++)
            {
                for (x = 0; x < 64; x++)
                {
                    if (markers[y, x] == 0)
                    {
                        index   = (y * 64) + x;
                        bit     = index % 8;
                        index >>= 3;

                        if ((parcel.Bitmap[index] & (1 << bit)) != 0)
                        {
                            markers[y, x] = parcel.LocalID;
                        }
                    }
                }
            }

            // Request parcel information for the next missing area
            for (y = 0; y < 64; y++)
            {
                for (x = 0; x < 64; x++)
                {
                    if (markers[y, x] == 0)
                    {
                        Client.Parcels.PropertiesRequest(simulator,
                                                         (y + 1) * 4.0f, (x + 1) * 4.0f,
                                                         y * 4.0f, x * 4.0f, 0, false);
                        return;
                    }
                }
            }

            // If we get here, there are no more zeroes in the markers map
            lock (active_sims)
            {
                active_sims.Remove(simulator);

                if (OnParcelsDownloaded != null)
                {
                    // This map is complete, fire callback
                    try { OnParcelsDownloaded(simulator, Parcels[simulator], markers); }
                    catch (Exception e) { Logger.Log(e.Message, Helpers.LogLevel.Error, Client, e); }
                }
            }
        }
Esempio n. 7
0
        private void SendParcelProperties(int parcelID, int sequenceID, bool snapSelection, ParcelResult result,
                                          LLAgent agent)
        {
            SceneParcel parcel;

            if (m_parcels.TryGetParcel(parcelID, out parcel))
            {
                // Owner sanity check
                if (parcel.OwnerID == UUID.Zero)
                {
                    m_log.Warn("Assigning parcel " + parcel.Name + " to " + agent.Name);
                    parcel.OwnerID = agent.ID;
                    m_parcels.AddOrUpdateParcel(parcel);
                }

                // Claim date sanity check
                if (parcel.ClaimDate <= Utils.Epoch)
                {
                    m_log.Warn("Resetting invalid parcel claim date");
                    parcel.ClaimDate = DateTime.UtcNow;
                    m_parcels.AddOrUpdateParcel(parcel);
                }

                ParcelPropertiesMessage properties = new ParcelPropertiesMessage();
                properties.Area                    = ParcelManager.GetParcelArea(parcel, out properties.AABBMin, out properties.AABBMax);
                properties.AuctionID               = 0; // Unused
                properties.AuthBuyerID             = parcel.AuthBuyerID;
                properties.Bitmap                  = parcel.Bitmap;
                properties.Category                = parcel.Category;
                properties.ClaimDate               = parcel.ClaimDate;
                properties.ClaimPrice              = 0; // Deprecated
                properties.Desc                    = parcel.Desc;
                properties.GroupID                 = parcel.GroupID;
                properties.IsGroupOwned            = parcel.IsGroupOwned;
                properties.LandingType             = parcel.Landing;
                properties.LocalID                 = parcel.LocalID;
                properties.MaxPrims                = parcel.MaxPrims;
                properties.MediaAutoScale          = parcel.Media.MediaAutoScale;
                properties.MediaDesc               = parcel.Media.MediaDesc;
                properties.MediaHeight             = parcel.Media.MediaHeight;
                properties.MediaID                 = parcel.Media.MediaID;
                properties.MediaLoop               = parcel.Media.MediaLoop;
                properties.MediaType               = parcel.Media.MediaType;
                properties.MediaURL                = parcel.Media.MediaURL;
                properties.MediaWidth              = parcel.Media.MediaWidth;
                properties.MusicURL                = parcel.Media.MediaURL;
                properties.Name                    = parcel.Name;
                properties.ObscureMedia            = parcel.ObscureMedia;
                properties.ObscureMusic            = parcel.ObscureMusic;
                properties.OtherCleanTime          = parcel.AutoReturnTime;
                properties.OwnerID                 = parcel.OwnerID;
                properties.ParcelFlags             = parcel.Flags;
                properties.ParcelPrimBonus         = 1f;
                properties.PassHours               = parcel.PassHours;
                properties.PassPrice               = parcel.PassPrice;
                properties.RegionDenyAgeUnverified = parcel.DenyAgeUnverified;
                properties.RegionDenyAnonymous     = parcel.DenyAnonymous;
                properties.RegionDenyIdentified    = false;
                properties.RegionDenyTransacted    = false;
                properties.RegionPushOverride      = parcel.PushOverride;
                properties.RentPrice               = 0; // Deprecated
                properties.RequestResult           = result;
                properties.SalePrice               = parcel.SalePrice;
                properties.SequenceID              = sequenceID;
                properties.SnapSelection           = snapSelection;
                properties.SnapshotID              = parcel.SnapshotID;
                properties.Status                  = parcel.Status;
                properties.UserLocation            = parcel.LandingLocation;
                properties.UserLookAt              = parcel.LandingLookAt;

                int ownerPrims    = 0;
                int groupPrims    = 0;
                int otherPrims    = 0;
                int selectedPrims = 0;

                lock (parcel.ParcelEntities)
                {
                    foreach (ISceneEntity entity in parcel.ParcelEntities.Values)
                    {
                        // TODO: We don't currently track whether objects have been shared/deeded to group?
                        if (entity.OwnerID == parcel.OwnerID)
                        {
                            ++ownerPrims;
                        }
                        else
                        {
                            ++otherPrims;
                        }

                        // TODO: We don't currently track selected prims
                    }
                }

                properties.OwnerPrims    = ownerPrims;
                properties.GroupPrims    = groupPrims;
                properties.OtherPrims    = otherPrims;
                properties.TotalPrims    = ownerPrims + groupPrims + otherPrims;
                properties.SelectedPrims = selectedPrims;

                // TODO: Implement these
                properties.SimWideMaxPrims   = 0;
                properties.SimWideTotalPrims = 0;

                // TODO: What are these?
                properties.SelfCount   = 0;
                properties.PublicCount = 0;
                properties.OtherCount  = 0;

                agent.EventQueue.QueueEvent("ParcelProperties", properties.Serialize());
            }
            else
            {
                m_log.Warn("SendParcelProperties() called for unknown parcel " + parcelID);
            }
        }
Esempio n. 8
0
 private void Parcels_OnParcelProperties(Simulator simulator, Parcel parcel, ParcelResult result, int selectedPrims, int sequenceID, bool snapSelection)
 {
     string pcl = parcel.Name;
     //this.parcel = parcel;
     //BeginInvoke(new MethodInvoker(UpdateLand));
 }
Esempio n. 9
0
 public void Parcels_OnParcelProperties(Simulator simulator, Parcel parcel, ParcelResult result, int selectedPrims, int sequenceID, bool snapSelection)
 {
     lock (parcels)
     {
         if (parcels.ContainsKey(parcel.LocalID)) return;
         parcels[parcel.LocalID] = parcel;
     }
     simulator.Client.Parcels.RequestSelectObjects(parcel.LocalID, (ObjectReturnType)31, parcel.OwnerID);
     //ParcelSelectObjects(simulator, parcel.LocalID, parcel.OwnerID);
     //SimRegion r = SimRegion.GetRegion(simulator);
     //r.Parcels_OnParcelProperties(simulator, parcel, result, selectedPrims, sequenceID, snapSelection);
 }
Esempio n. 10
0
        private void Parcels_OnParcelProperties(Simulator simulator, Parcel parcel, ParcelResult result,
            int selectedPrims, int sequenceID, bool snapSelection)
        {
            // Check if this is for a simulator we're concerned with
            if (!active_sims.Contains(simulator)) return;

            // Warn about parcel property request errors and bail out
            if (result == ParcelResult.NoData)
            {
                Logger.Log("ParcelDownloader received a NoData response, sequenceID " + sequenceID,
                    Helpers.LogLevel.Warning, Client);
                return;
            }

            // Warn about unexpected data and bail out
            if (!ParcelMarked.ContainsKey(simulator))
            {
                Logger.Log("ParcelDownloader received unexpected parcel data for " + simulator,
                    Helpers.LogLevel.Warning, Client);
                return;
            }

            int x, y, index, bit;
            int[,] markers = ParcelMarked[simulator];

            // Add this parcel to the dictionary of LocalID -> Parcel mappings
            lock (Parcels[simulator])
                if (!Parcels[simulator].ContainsKey(parcel.LocalID))
                    Parcels[simulator][parcel.LocalID] = parcel;

            // Request the access list for this parcel
            Client.Parcels.AccessListRequest(simulator, parcel.LocalID, 
                AccessList.Both, 0);

            // Mark this area as downloaded
            for (y = 0; y < 64; y++)
            {
                for (x = 0; x < 64; x++)
                {
                    if (markers[y, x] == 0)
                    {
                        index = (y * 64) + x;
                        bit = index % 8;
                        index >>= 3;

                        if ((parcel.Bitmap[index] & (1 << bit)) != 0)
                            markers[y, x] = parcel.LocalID;
                    }
                }
            }

            // Request parcel information for the next missing area
            for (y = 0; y < 64; y++)
            {
                for (x = 0; x < 64; x++)
                {
                    if (markers[y, x] == 0)
                    {
                        Client.Parcels.PropertiesRequest(simulator,
                                                         (y + 1) * 4.0f, (x + 1) * 4.0f,
                                                         y * 4.0f, x * 4.0f, 0, false);
                        return;
                    }
                }
            }

            // If we get here, there are no more zeroes in the markers map
            lock (active_sims)
            {
                active_sims.Remove(simulator);

                if (OnParcelsDownloaded != null)
                {
                    // This map is complete, fire callback
                    try { OnParcelsDownloaded(simulator, Parcels[simulator], markers); }
                    catch (Exception e) { Logger.Log(e.Message, Helpers.LogLevel.Error, Client, e); }
                }
            }
        }
Esempio n. 11
0
        private void SendParcelProperties(int parcelID, int sequenceID, bool snapSelection, ParcelResult result,
            LLAgent agent)
        {
            SceneParcel parcel;
            if (m_parcels.TryGetParcel(parcelID, out parcel))
            {
                // Owner sanity check
                if (parcel.OwnerID == UUID.Zero)
                {
                    m_log.Warn("Assigning parcel " + parcel.Name + " to " + agent.Name);
                    parcel.OwnerID = agent.ID;
                    m_parcels.AddOrUpdateParcel(parcel);
                }

                // Claim date sanity check
                if (parcel.ClaimDate <= Utils.Epoch)
                {
                    m_log.Warn("Resetting invalid parcel claim date");
                    parcel.ClaimDate = DateTime.UtcNow;
                    m_parcels.AddOrUpdateParcel(parcel);
                }

                ParcelPropertiesMessage properties = new ParcelPropertiesMessage();
                properties.Area = ParcelManager.GetParcelArea(parcel, out properties.AABBMin, out properties.AABBMax);
                properties.AuctionID = 0; // Unused
                properties.AuthBuyerID = parcel.AuthBuyerID;
                properties.Bitmap = parcel.Bitmap;
                properties.Category = parcel.Category;
                properties.ClaimDate = parcel.ClaimDate;
                properties.ClaimPrice = 0; // Deprecated
                properties.Desc = parcel.Desc;
                properties.GroupID = parcel.GroupID;
                properties.IsGroupOwned = parcel.IsGroupOwned;
                properties.LandingType = parcel.Landing;
                properties.LocalID = parcel.LocalID;
                properties.MaxPrims = parcel.MaxPrims;
                properties.MediaAutoScale = parcel.Media.MediaAutoScale;
                properties.MediaDesc = parcel.Media.MediaDesc;
                properties.MediaHeight = parcel.Media.MediaHeight;
                properties.MediaID = parcel.Media.MediaID;
                properties.MediaLoop = parcel.Media.MediaLoop;
                properties.MediaType = parcel.Media.MediaType;
                properties.MediaURL = parcel.Media.MediaURL;
                properties.MediaWidth = parcel.Media.MediaWidth;
                properties.MusicURL = parcel.Media.MediaURL;
                properties.Name = parcel.Name;
                properties.ObscureMedia = parcel.ObscureMedia;
                properties.ObscureMusic = parcel.ObscureMusic;
                properties.OtherCleanTime = parcel.AutoReturnTime;
                properties.OwnerID = parcel.OwnerID;
                properties.ParcelFlags = parcel.Flags;
                properties.ParcelPrimBonus = 1f;
                properties.PassHours = parcel.PassHours;
                properties.PassPrice = parcel.PassPrice;
                properties.RegionDenyAgeUnverified = parcel.DenyAgeUnverified;
                properties.RegionDenyAnonymous = parcel.DenyAnonymous;
                properties.RegionDenyIdentified = false;
                properties.RegionDenyTransacted = false;
                properties.RegionPushOverride = parcel.PushOverride;
                properties.RentPrice = 0; // Deprecated
                properties.RequestResult = result;
                properties.SalePrice = parcel.SalePrice;
                properties.SequenceID = sequenceID;
                properties.SnapSelection = snapSelection;
                properties.SnapshotID = parcel.SnapshotID;
                properties.Status = parcel.Status;
                properties.UserLocation = parcel.LandingLocation;
                properties.UserLookAt = parcel.LandingLookAt;

                int ownerPrims = 0;
                int groupPrims = 0;
                int otherPrims = 0;
                int selectedPrims = 0;

                lock (parcel.ParcelEntities)
                {
                    foreach (ISceneEntity entity in parcel.ParcelEntities.Values)
                    {
                        // TODO: We don't currently track whether objects have been shared/deeded to group?
                        if (entity.OwnerID == parcel.OwnerID)
                            ++ownerPrims;
                        else
                            ++otherPrims;

                        // TODO: We don't currently track selected prims
                    }
                }

                properties.OwnerPrims = ownerPrims;
                properties.GroupPrims = groupPrims;
                properties.OtherPrims = otherPrims;
                properties.TotalPrims = ownerPrims + groupPrims + otherPrims;
                properties.SelectedPrims = selectedPrims;

                // TODO: Implement these
                properties.SimWideMaxPrims = 0;
                properties.SimWideTotalPrims = 0;

                // TODO: What are these?
                properties.SelfCount = 0;
                properties.PublicCount = 0;
                properties.OtherCount = 0;

                agent.EventQueue.QueueEvent("ParcelProperties", properties.Serialize());
            }
            else
            {
                m_log.Warn("SendParcelProperties() called for unknown parcel " + parcelID);
            }
        }
Esempio n. 12
0
        void SendParcelProperties(int parcelID, int sequenceID, bool snapSelection, ParcelResult result,
                                  Agent agent)
        {
            Parcel parcel;

            if (parcels.TryGetValue(parcelID, out parcel))
            {
                ParcelPropertiesPacket properties = new ParcelPropertiesPacket();
                properties.AgeVerificationBlock.RegionDenyAgeUnverified = false;
                properties.ParcelData.AABBMax              = parcel.AABBMax;
                properties.ParcelData.AABBMin              = parcel.AABBMin;
                properties.ParcelData.Area                 = parcel.Area;
                properties.ParcelData.AuctionID            = parcel.AuctionID;
                properties.ParcelData.AuthBuyerID          = parcel.AuthBuyerID;
                properties.ParcelData.Bitmap               = parcel.Bitmap;
                properties.ParcelData.Category             = (byte)parcel.Category;
                properties.ParcelData.ClaimDate            = (int)Utils.DateTimeToUnixTime(parcel.ClaimDate);
                properties.ParcelData.ClaimPrice           = parcel.ClaimPrice;
                properties.ParcelData.Desc                 = Utils.StringToBytes(parcel.Desc);
                properties.ParcelData.GroupID              = parcel.GroupID;
                properties.ParcelData.GroupPrims           = parcel.GroupPrims;
                properties.ParcelData.IsGroupOwned         = parcel.IsGroupOwned;
                properties.ParcelData.LandingType          = (byte)parcel.Landing;
                properties.ParcelData.LocalID              = parcel.LocalID;
                properties.ParcelData.MaxPrims             = parcel.MaxPrims;
                properties.ParcelData.MediaAutoScale       = parcel.Media.MediaAutoScale;
                properties.ParcelData.MediaID              = parcel.Media.MediaID;
                properties.ParcelData.MediaURL             = Utils.StringToBytes(parcel.Media.MediaURL);
                properties.ParcelData.MusicURL             = Utils.StringToBytes(parcel.MusicURL);
                properties.ParcelData.Name                 = Utils.StringToBytes(parcel.Name);
                properties.ParcelData.OtherCleanTime       = parcel.OtherCleanTime;
                properties.ParcelData.OtherCount           = parcel.OtherCount;
                properties.ParcelData.OtherPrims           = parcel.OtherPrims;
                properties.ParcelData.OwnerID              = parcel.OwnerID;
                properties.ParcelData.OwnerPrims           = parcel.OwnerPrims;
                properties.ParcelData.ParcelFlags          = (uint)parcel.Flags;
                properties.ParcelData.ParcelPrimBonus      = parcel.ParcelPrimBonus;
                properties.ParcelData.PassHours            = parcel.PassHours;
                properties.ParcelData.PassPrice            = parcel.PassPrice;
                properties.ParcelData.PublicCount          = parcel.PublicCount;
                properties.ParcelData.RegionDenyAnonymous  = parcel.RegionDenyAnonymous;
                properties.ParcelData.RegionDenyIdentified = false; // Deprecated
                properties.ParcelData.RegionDenyTransacted = false; // Deprecated
                properties.ParcelData.RegionPushOverride   = parcel.RegionPushOverride;
                properties.ParcelData.RentPrice            = parcel.RentPrice;
                properties.ParcelData.RequestResult        = (int)result;
                properties.ParcelData.SalePrice            = parcel.SalePrice;
                properties.ParcelData.SelectedPrims        = 0; // TODO:
                properties.ParcelData.SelfCount            = parcel.SelfCount;
                properties.ParcelData.SequenceID           = sequenceID;
                properties.ParcelData.SimWideMaxPrims      = parcel.SimWideMaxPrims;
                properties.ParcelData.SimWideTotalPrims    = parcel.SimWideTotalPrims;
                properties.ParcelData.SnapSelection        = snapSelection;
                properties.ParcelData.SnapshotID           = parcel.SnapshotID;
                properties.ParcelData.Status               = (byte)parcel.Status;
                properties.ParcelData.TotalPrims           = parcel.TotalPrims;
                properties.ParcelData.UserLocation         = parcel.UserLocation;
                properties.ParcelData.UserLookAt           = parcel.UserLookAt;

                // HACK: Make everyone think they are the owner of this parcel
                properties.ParcelData.OwnerID = agent.AgentID;

                server.UDP.SendPacket(agent.AgentID, properties, PacketCategory.Transaction);
            }
            else
            {
                Logger.Log("SendParcelProperties() called for unknown parcel " + parcelID, Helpers.LogLevel.Warning);
            }
        }