コード例 #1
0
        public bool CanCreateAt(IScenePresence presence, Vector3 location)
        {
            if (m_parcels == null)
            {
                return(true);
            }

            SceneParcel parcel;

            if (m_parcels.TryGetParcel(location, out parcel))
            {
                // If we can't enter the parcel we can't create anything there either
                if (!CanEnterParcel(presence, parcel))
                {
                    return(false);
                }

                // CreateObjects flag set? We're good
                if ((parcel.Flags & ParcelFlags.CreateObjects) == ParcelFlags.CreateObjects)
                {
                    return(true);
                }

                // CreateGroupObjects flag set and we're a member of the parcel group? We're good
                if ((parcel.Flags & ParcelFlags.CreateGroupObjects) == ParcelFlags.CreateGroupObjects && IsInGroup(presence, parcel.GroupID))
                {
                    return(true);
                }

                return(false);
            }
            else
            {
                m_log.Warn("No parcel found at " + location);
                return(true);
            }
        }
コード例 #2
0
ファイル: Parcels.cs プロジェクト: jhurliman/simian
        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);
            }
        }