Ejemplo n.º 1
0
 public void Parcels_OnParcelProperties(Parcel parcel, ParcelManager.ParcelResult result, int sequenceID, bool snapSelection)
 {
     if (result == ParcelManager.ParcelResult.NoData)
     {
         Hashtable message = new Hashtable();
         message.Add("MessageType", "ParcelPropertiesFailed");
         message.Add("LocalID", parcel.LocalID);
         message.Add("SequenceID", sequenceID);
         enqueue(message);
     }
     else
     {
         Hashtable message = new Hashtable();
         message.Add("MessageType", "ParcelProperties");
         message.Add("SequenceID", sequenceID);
         message.Add("LocalID", parcel.LocalID);
         message.Add("AABBMax", parcel.AABBMax);
         message.Add("AABBMin", parcel.AABBMin);
         message.Add("AccessList", parcel.AccessList);
         message.Add("Area", parcel.Area);
         message.Add("AuctionID", parcel.AuctionID);
         message.Add("AuthBuyerID", parcel.AuthBuyerID);
         message.Add("Category", parcel.Category);
         message.Add("ClaimDate", parcel.ClaimDate);
         message.Add("ClaimPrice", parcel.ClaimPrice);
         message.Add("Desc", parcel.Desc);
         message.Add("Dwell", parcel.Dwell);
         message.Add("Flags", (uint)parcel.Flags);
         message.Add("GroupID", parcel.GroupID);
         message.Add("GroupPrims", parcel.GroupPrims);
         message.Add("IsGroupOwned", parcel.IsGroupOwned);
         message.Add("LandingType", parcel.LandingType);
         message.Add("MaxPrims", parcel.MaxPrims);
         message.Add("MediaAutoScale", parcel.MediaAutoScale);
         message.Add("MediaDesc", parcel.MediaDesc);
         message.Add("MediaHeight", parcel.MediaHeight);
         message.Add("MediaID", parcel.MediaID);
         message.Add("MediaLoop", parcel.MediaLoop);
         message.Add("MediaType", parcel.MediaType);
         message.Add("MediaURL", parcel.MediaURL);
         message.Add("MediaWidth", parcel.MediaWidth);
         message.Add("MusicURL", parcel.MusicURL);
         message.Add("Name", parcel.Name);
         message.Add("ObscureMedia", parcel.ObscureMedia);
         message.Add("ObscureMusic", parcel.ObscureMusic);
         message.Add("OtherCleanTime", parcel.OtherCleanTime);
         message.Add("OtherPrims", parcel.OtherPrims);
         message.Add("OwnerPrims", parcel.OwnerPrims);
         message.Add("OwnerID", parcel.OwnerID);
         message.Add("PrimBonus", parcel.ParcelPrimBonus);
         message.Add("PassHours", parcel.PassHours);
         message.Add("PassPrice", parcel.PassPrice);
         message.Add("PublicCount", parcel.PublicCount);
         message.Add("RegionDenyAgeUnverified", parcel.RegionDenyAgeUnverified);
         message.Add("RegionDenyAnonymous", parcel.RegionDenyAnonymous);
         message.Add("RegionPushOverride", parcel.RegionPushOverride);
         message.Add("RentPrice", parcel.RentPrice);
         message.Add("SalePrice", parcel.SalePrice);
         message.Add("SelectedPrims", parcel.SelectedPrims);
         message.Add("SelfCount", parcel.SelfCount);
         message.Add("SimWideMaxPrims", parcel.SimWideMaxPrims);
         message.Add("SimWideTotalPrims", parcel.SimWideTotalPrims);
         message.Add("SnapshotID", parcel.SnapshotID);
         message.Add("Status", parcel.Status);
         message.Add("TotalPrims", parcel.TotalPrims);
         message.Add("UserLocation", parcel.UserLocation);
         message.Add("UserLookAt", parcel.UserLookAt);
         enqueue(message);
     }
 }
Ejemplo n.º 2
0
        private void Parcels_OnParcelProperties(Parcel parcel, ParcelManager.ParcelResult result, int sequenceID,
            bool snapSelection)
        {
            // Check if this is for a simulator we're concerned with
            if (!active_sims.Contains(parcel.Simulator)) return;

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

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

            int x, y, index, bit;
            int[,] markers = ParcelMarked[parcel.Simulator];

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

            // Request the access list for this parcel
            Client.Parcels.AccessListRequest(parcel.Simulator, parcel.LocalID,
                ParcelManager.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(parcel.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(parcel.Simulator);

                if (OnParcelsDownloaded != null)
                {
                    // This map is complete, fire callback
                    try { OnParcelsDownloaded(parcel.Simulator, Parcels[parcel.Simulator], markers); }
                    catch (Exception e) { Client.Log(e.ToString(), Helpers.LogLevel.Error); }
                }
            }
        }