コード例 #1
0
ファイル: IParcels.cs プロジェクト: jhurliman/simian
        public static SceneParcel FromOSD(OSDMap map)
        {
            SceneParcel parcel = new SceneParcel();

            parcel.ID      = map["id"].AsUUID();
            parcel.LocalID = map["local_id"].AsInteger();

            OSDArray blacklist = map["access_black_list"] as OSDArray;

            if (blacklist != null)
            {
                parcel.AccessBlackList = new List <ParcelAccessEntry>(blacklist.Count);
                for (int i = 0; i < blacklist.Count; i++)
                {
                    if (blacklist[i] is OSDMap)
                    {
                        parcel.AccessBlackList[i] = ParcelAccessEntry.FromOSD((OSDMap)blacklist[i]);
                    }
                }
            }

            OSDArray whitelist = map["access_white_list"] as OSDArray;

            if (whitelist != null)
            {
                parcel.AccessWhiteList = new List <ParcelAccessEntry>(whitelist.Count);
                for (int i = 0; i < whitelist.Count; i++)
                {
                    if (whitelist[i] is OSDMap)
                    {
                        parcel.AccessWhiteList[i] = ParcelAccessEntry.FromOSD((OSDMap)whitelist[i]);
                    }
                }
            }

            parcel.AuthBuyerID    = map["auth_buyer_id"].AsUUID();
            parcel.AutoReturnTime = map["auto_return_time"].AsInteger();
            parcel.Bitmap         = map["bitmap"].AsBinary();
            parcel.Category       = (ParcelCategory)map["category"].AsInteger();
            parcel.ClaimDate      = map["claim_date"].AsDate();
            parcel.Desc           = map["desc"].AsString();
            parcel.Dwell          = (float)map["dwell"].AsReal();
            parcel.Flags          = (ParcelFlags)map["flags"].AsInteger();
            parcel.GroupID        = map["group_id"].AsUUID();
            parcel.IsGroupOwned   = map["is_group_owned"].AsBoolean();
            parcel.Landing        = (LandingType)map["landing"].AsInteger();
            parcel.MaxPrims       = map["max_prims"].AsInteger();

            OSDMap media = map["parcel_media"] as OSDMap;

            if (media != null)
            {
                parcel.Media.MediaAutoScale = media["auto_scale"].AsBoolean();
                parcel.Media.MediaDesc      = media["desc"].AsString();
                parcel.Media.MediaHeight    = media["height"].AsInteger();
                parcel.Media.MediaID        = media["id"].AsUUID();
                parcel.Media.MediaLoop      = media["loop"].AsBoolean();
                parcel.Media.MediaType      = media["type"].AsString();
                parcel.Media.MediaURL       = media["url"].AsString();
                parcel.Media.MediaWidth     = media["width"].AsInteger();
            }

            parcel.MusicURL          = map["music_url"].AsString();
            parcel.Name              = map["name"].AsString();
            parcel.ObscureMedia      = map["obscure_media"].AsBoolean();
            parcel.ObscureMusic      = map["obscure_music"].AsBoolean();
            parcel.OwnerID           = map["owner_id"].AsUUID();
            parcel.PassHours         = (float)map["pass_hours"].AsReal();
            parcel.PassPrice         = map["pass_price"].AsInteger();
            parcel.DenyAgeUnverified = map["deny_age_unverified"].AsBoolean();
            parcel.DenyAnonymous     = map["deny_anonymous"].AsBoolean();
            parcel.PushOverride      = map["push_override"].AsBoolean();
            parcel.SalePrice         = map["sale_price"].AsInteger();
            parcel.SnapshotID        = map["snapshot_id"].AsUUID();
            parcel.Status            = (ParcelStatus)map["status"].AsInteger();
            parcel.LandingLocation   = map["landing_location"].AsVector3();
            parcel.LandingLookAt     = map["landing_look_at"].AsVector3();

            return(parcel);
        }
コード例 #2
0
        public bool CanEnterParcel(IScenePresence presence, SceneParcel parcel)
        {
            // Check for superuser
            if (IsGridAdmin(presence) || IsEstateManager(presence))
            {
                return(true);
            }

            // Check for an unverified presence ban
            if ((parcel.Flags & ParcelFlags.DenyAnonymous) == ParcelFlags.DenyAnonymous && !presence.IsVerified)
            {
                return(false);
            }

            // Check if UseAccessGroup is enabled and if so, is the presence a member of the correct group
            if ((parcel.Flags & ParcelFlags.UseAccessGroup) == ParcelFlags.UseAccessGroup && !IsInGroup(presence, parcel.GroupID))
            {
                return(false);
            }

            // Is the whitelist enabled?
            if ((parcel.Flags & ParcelFlags.UseAccessList) == ParcelFlags.UseAccessList)
            {
                // Check the whitelist
                if (parcel.AccessWhiteList != null)
                {
                    lock (parcel.AccessWhiteList)
                    {
                        for (int i = 0; i < parcel.AccessWhiteList.Count; i++)
                        {
                            ParcelAccessEntry pae = parcel.AccessWhiteList[i];
                            if (pae.AgentID == presence.ID)
                            {
                                return(true);
                            }
                        }
                    }
                }

                return(false);
            }

            // Is the blacklist enabled?
            if ((parcel.Flags & ParcelFlags.UseBanList) == ParcelFlags.UseBanList)
            {
                // Check the blacklist
                if (parcel.AccessBlackList != null)
                {
                    lock (parcel.AccessBlackList)
                    {
                        for (int i = 0; i < parcel.AccessBlackList.Count; i++)
                        {
                            ParcelAccessEntry pae = parcel.AccessBlackList[i];
                            if (pae.AgentID == presence.ID)
                            {
                                return(false);
                            }
                        }
                    }
                }
            }

            return(true);
        }