示例#1
0
        private void ParcelInfoReplyHandler(Packet packet, Simulator simulator)
        {
            if (ParcelInfoParcel != null)
            {
                ParcelInfoReplyPacket reply = (ParcelInfoReplyPacket)packet;

                if (!reply.Data.ParcelID.Equals(ParcelInfoParcel.ID))
                {
                    Client.Log("Received a ParcelInfoReply for " + reply.Data.ParcelID.ToString() +
                               ", looking for " + ParcelInfoParcel.ID.ToString(), Helpers.LogLevel.Warning);

                    // Build and resend the ParcelInfoRequest packet
                    ParcelInfoRequestPacket request = new ParcelInfoRequestPacket();
                    request.AgentData.AgentID   = Client.Network.AgentID;
                    request.AgentData.SessionID = Client.Network.SessionID;
                    request.Data.ParcelID       = ParcelInfoParcel.ID;

                    Client.Network.SendPacket(request);

                    return;
                }

                ParcelInfoParcel.SimName          = Helpers.FieldToString(reply.Data.SimName);
                ParcelInfoParcel.ActualArea       = reply.Data.ActualArea;
                ParcelInfoParcel.GlobalPosition.X = reply.Data.GlobalX;
                ParcelInfoParcel.GlobalPosition.Y = reply.Data.GlobalY;
                ParcelInfoParcel.GlobalPosition.Z = reply.Data.GlobalZ;
                ParcelInfoParcel.Name             = Helpers.FieldToString(reply.Data.Name);
                ParcelInfoParcel.Desc             = Helpers.FieldToString(reply.Data.Desc);
                ParcelInfoParcel.SalePrice        = reply.Data.SalePrice;
                ParcelInfoParcel.OwnerID          = reply.Data.OwnerID;
                ParcelInfoParcel.SnapshotID       = reply.Data.SnapshotID;
                ParcelInfoParcel.Dwell            = reply.Data.Dwell;

                // Get RegionHandle from GlobalX/GlobalY
                uint handleX = (uint)Math.Floor(ParcelInfoParcel.GlobalPosition.X / 256.0F);
                handleX *= 256;
                uint handleY = (uint)Math.Floor(ParcelInfoParcel.GlobalPosition.Y / 256.0F);
                handleY *= 256;
                // FIXME: Helpers function needed
                //ParcelInfoParcel.RegionHandle = new U64(handleX, handleY);

                // Get SimPosition from GlobalX/GlobalY and RegionHandle
                ParcelInfoParcel.SimPosition.X = ParcelInfoParcel.GlobalPosition.X - (float)handleX;
                ParcelInfoParcel.SimPosition.Y = ParcelInfoParcel.GlobalPosition.Y - (float)handleY;
                ParcelInfoParcel.SimPosition.Z = ParcelInfoParcel.GlobalPosition.Z;

                Finished = true;
            }
        }
示例#2
0
        private void ParcelInfoRequestHandler(Packet packet, LLAgent agent)
        {
            ParcelInfoRequestPacket request = (ParcelInfoRequestPacket)packet;

            SceneParcel parcel;

            if (m_parcels.TryGetParcel(request.Data.ParcelID, out parcel))
            {
                Vector3d scenePosition = m_scene.MinPosition;
                Vector3  aabbMin, aabbMax;

                ParcelInfoReplyPacket reply = new ParcelInfoReplyPacket();
                reply.AgentData.AgentID = agent.ID;
                reply.Data.ActualArea   = ParcelManager.GetParcelArea(parcel, out aabbMin, out aabbMax);
                reply.Data.AuctionID    = 0;
                reply.Data.BillableArea = reply.Data.ActualArea;
                reply.Data.Desc         = Utils.StringToBytes(parcel.Desc);
                reply.Data.Dwell        = parcel.Dwell;
                reply.Data.Flags        = (byte)parcel.Flags;
                reply.Data.GlobalX      = (float)scenePosition.X + aabbMin.X;
                reply.Data.GlobalY      = (float)scenePosition.Y + aabbMin.Y;
                reply.Data.GlobalZ      = 0f; // FIXME:
                reply.Data.Name         = Utils.StringToBytes(parcel.Name);
                reply.Data.OwnerID      = parcel.OwnerID;
                reply.Data.ParcelID     = parcel.ID;
                reply.Data.SalePrice    = parcel.SalePrice;
                reply.Data.SimName      = Utils.StringToBytes(m_scene.Name);
                reply.Data.SnapshotID   = parcel.SnapshotID;

                m_udp.SendPacket(agent, reply, ThrottleCategory.Task, false);
            }
            else
            {
                m_log.Warn(agent.Name + " requested info for unknown parcel " + request.Data.ParcelID);
            }
        }
示例#3
0
        /// <summary>
        /// Request basic information for a single parcel
        /// </summary>
        /// <param name="parcelID">Simulator-local ID of the parcel</param>
        public void RequestParcelInfo(UUID parcelID)
        {
            ParcelInfoRequestPacket request = new ParcelInfoRequestPacket();
            request.AgentData.AgentID = Client.Self.AgentID;
            request.AgentData.SessionID = Client.Self.SessionID;
            request.Data.ParcelID = parcelID;

            Client.Network.SendPacket(request);
        }
示例#4
0
        /// <summary>
        /// Request basic information for a single parcel
        /// </summary>
        /// <param name="parcelID">Simulator-local ID of the parcel</param>
        public void InfoRequest(UUID parcelID)
        {
            ParcelInfoRequestPacket request = new ParcelInfoRequestPacket();
            request.AgentData.AgentID = Network.AgentID;
            request.AgentData.SessionID = Network.SessionID;
            request.Data.ParcelID = parcelID;

            Network.SendPacket(request);
        }
        private void ParcelInfoReplyHandler(Packet packet, Simulator simulator)
        {
            if (ParcelInfoParcel != null)
            {
                ParcelInfoReplyPacket reply = (ParcelInfoReplyPacket)packet;

                if (!reply.Data.ParcelID.Equals(ParcelInfoParcel.ID))
                {
                    Client.Log("Received a ParcelInfoReply for " + reply.Data.ParcelID.ToString() +
                            ", looking for " + ParcelInfoParcel.ID.ToString(), Helpers.LogLevel.Warning);

                    // Build and resend the ParcelInfoRequest packet
                    ParcelInfoRequestPacket request = new ParcelInfoRequestPacket();
                    request.AgentData.AgentID = Client.Network.AgentID;
                    request.AgentData.SessionID = Client.Network.SessionID;
                    request.Data.ParcelID = ParcelInfoParcel.ID;

                    Client.Network.SendPacket(request);

                    return;
                }

                ParcelInfoParcel.SimName = Helpers.FieldToString(reply.Data.SimName);
                ParcelInfoParcel.ActualArea = reply.Data.ActualArea;
                ParcelInfoParcel.GlobalPosition.X = reply.Data.GlobalX;
                ParcelInfoParcel.GlobalPosition.Y = reply.Data.GlobalY;
                ParcelInfoParcel.GlobalPosition.Z = reply.Data.GlobalZ;
                ParcelInfoParcel.Name = Helpers.FieldToString(reply.Data.Name);
                ParcelInfoParcel.Desc = Helpers.FieldToString(reply.Data.Desc);
                ParcelInfoParcel.SalePrice = reply.Data.SalePrice;
                ParcelInfoParcel.OwnerID = reply.Data.OwnerID;
                ParcelInfoParcel.SnapshotID = reply.Data.SnapshotID;
                ParcelInfoParcel.Dwell = reply.Data.Dwell;

                // Get RegionHandle from GlobalX/GlobalY
                uint handleX = (uint)Math.Floor(ParcelInfoParcel.GlobalPosition.X / 256.0F);
                handleX *= 256;
                uint handleY = (uint)Math.Floor(ParcelInfoParcel.GlobalPosition.Y / 256.0F);
                handleY *= 256;
                // FIXME: Helpers function needed
                //ParcelInfoParcel.RegionHandle = new U64(handleX, handleY);

                // Get SimPosition from GlobalX/GlobalY and RegionHandle
                ParcelInfoParcel.SimPosition.X = ParcelInfoParcel.GlobalPosition.X - (float)handleX;
                ParcelInfoParcel.SimPosition.Y = ParcelInfoParcel.GlobalPosition.Y - (float)handleY;
                ParcelInfoParcel.SimPosition.Z = ParcelInfoParcel.GlobalPosition.Z;

                Finished = true;
            }
        }