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); }
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); }