Esempio n. 1
0
        private void ParcelDivideHandler(Packet packet, LLAgent agent)
        {
            ParcelDividePacket divide = (ParcelDividePacket)packet;

            int startX = (int)Math.Round(divide.ParcelData.West) / 4;
            int startY = (int)Math.Round(divide.ParcelData.South) / 4;
            int endX   = ((int)Math.Round(divide.ParcelData.East) / 4) - 1;
            int endY   = ((int)Math.Round(divide.ParcelData.North) / 4) - 1;

            if (startX < 0 || startY < 0 || endX < startX || endY < startY ||
                endX > 63 || endY > 63 || startX > endX || startY > endY)
            {
                m_log.Warn(agent.Name + String.Format(" sent invalid ParcelDivide: West {0} South {1} East {2} North {3}",
                                                      divide.ParcelData.West, divide.ParcelData.South, divide.ParcelData.East, divide.ParcelData.North));
                return;
            }

            // Make sure only a single parcel was selected
            int startParcelID = m_parcels.GetParcelID(startX, startY);

            for (int y = startY; y <= endY; y++)
            {
                for (int x = startX; x <= endX; x++)
                {
                    int parcelID = m_parcels.GetParcelID(x, y);
                    if (parcelID != startParcelID)
                    {
                        m_scene.PresenceAlert(this, agent, "Only one parcel can be subdivided at a time");
                        return;
                    }
                }
            }

            SceneParcel parcel;

            if (!m_parcels.TryGetParcel(startParcelID, out parcel))
            {
                m_log.Warn("Failed to look up parcel " + startParcelID + " during parcel divide");
                return;
            }

            if (m_permissions != null && !m_permissions.CanEditParcel(agent, parcel))
            {
                m_scene.PresenceAlert(this, agent, "You do not have permission to subdivide this parcel");
                return;
            }

            m_parcels.SplitParcel(parcel, startX, endX, startY, endY);

            // Broadcast the new parcel overlay info
            m_scene.ForEachPresence(SendParcelOverlay);
        }
Esempio n. 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="west"></param>
        /// <param name="south"></param>
        /// <param name="east"></param>
        /// <param name="north"></param>
        public void ParcelSubdivide(float west, float south, float east, float north)
        {
            ParcelDividePacket divide = new ParcelDividePacket();

            divide.AgentData.AgentID   = Client.Network.AgentID;
            divide.AgentData.SessionID = Client.Network.SessionID;
            divide.ParcelData.East     = east;
            divide.ParcelData.North    = north;
            divide.ParcelData.South    = south;
            divide.ParcelData.West     = west;

            // FIXME: Region needs a reference to it's parent Simulator
            //Client.Network.SendPacket((Packet)divide, this.Simulator);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="west"></param>
        /// <param name="south"></param>
        /// <param name="east"></param>
        /// <param name="north"></param>
        public void ParcelSubdivide(float west, float south, float east, float north)
        {
            ParcelDividePacket divide = new ParcelDividePacket();
            divide.AgentData.AgentID = Client.Network.AgentID;
            divide.AgentData.SessionID = Client.Network.SessionID;
            divide.ParcelData.East = east;
            divide.ParcelData.North = north;
            divide.ParcelData.South = south;
            divide.ParcelData.West = west;

            // FIXME: Region needs a reference to it's parent Simulator
            //Client.Network.SendPacket((Packet)divide, this.Simulator);
        }
Esempio n. 4
0
        /// <summary>
        /// Subdivide (split) a parcel
        /// </summary>
        /// <param name="simulator"></param>
        /// <param name="west"></param>
        /// <param name="south"></param>
        /// <param name="east"></param>
        /// <param name="north"></param>
        public void ParcelSubdivide(Simulator simulator, float west, float south, float east, float north)
        {
            ParcelDividePacket divide = new ParcelDividePacket();
            divide.AgentData.AgentID = Client.Self.AgentID;
            divide.AgentData.SessionID = Client.Self.SessionID;
            divide.ParcelData.East = east;
            divide.ParcelData.North = north;
            divide.ParcelData.South = south;
            divide.ParcelData.West = west;

            Client.Network.SendPacket(divide, simulator);
        }