Пример #1
0
        private Hashtable GetObjectPhysicsData(UUID agentID, Hashtable mDhttpMethod)
        {
            OSDMap rm = (OSDMap)OSDParser.DeserializeLLSDXml((string)mDhttpMethod["requestbody"]);

            OSDArray keys = (OSDArray)rm["object_ids"];

            IEventQueueService eqs = m_scene.RequestModuleInterface <IEventQueueService>();

            if (eqs != null)
            {
#if (!ISWIN)
                List <ISceneChildEntity> list = new List <ISceneChildEntity>();
                foreach (OSD key in keys)
                {
                    list.Add(m_scene.GetSceneObjectPart(key.AsUUID()));
                }
                eqs.ObjectPhysicsProperties(list.ToArray(),
                                            agentID, m_scene.RegionInfo.RegionHandle);
#else
                eqs.ObjectPhysicsProperties(keys.Select(key => m_scene.GetSceneObjectPart(key.AsUUID())).ToArray(), agentID, m_scene.RegionInfo.RegionHandle);
#endif
            }
            //Send back data
            Hashtable responsedata = new Hashtable();
            responsedata["int_response_code"]   = 200; //501; //410; //404;
            responsedata["content_type"]        = "text/plain";
            responsedata["keepalive"]           = false;
            responsedata["str_response_string"] = "";
            return(responsedata);
        }
        private void UpdateGesture(UUID userID, UUID itemID, bool enabled)
        {
            OSDArray gestures    = FetchGestures(userID);
            OSDArray newGestures = new OSDArray();

#if (!ISWIN)
            foreach (OSD t in gestures)
            {
                UUID gesture = t.AsUUID();
                if (gesture != itemID)
                {
                    newGestures.Add(OSD.FromUUID(gesture));
                }
            }
#else
            foreach (UUID gesture in gestures.Select(t => t.AsUUID()).Where(gesture => gesture != itemID))
            {
                newGestures.Add(OSD.FromUUID(gesture));
            }
#endif

            if (enabled)
            {
                newGestures.Add(OSD.FromUUID(itemID));
            }

            SaveGestures(userID, newGestures);
        }
Пример #3
0
            public void ReadXml(string rawXml)
            {
                using (StringReader sr = new StringReader(rawXml))
                {
                    using (XmlTextReader xtr = new XmlTextReader(sr))
                    {
                        xtr.MoveToContent();

                        string type = xtr.GetAttribute("type");
                        //MainConsole.Instance.DebugFormat("[MOAP]: Loaded media texture entry with type {0}", type);

                        if (type != MEDIA_TEXTURE_TYPE)
                        {
                            return;
                        }

                        xtr.ReadStartElement("OSMedia");

                        OSDArray osdMeArray = (OSDArray)OSDParser.DeserializeLLSDXml(xtr.ReadInnerXml());

                        foreach (
                            MediaEntry me in
                            osdMeArray.Select(
                                osdMe => (osdMe is OSDMap ? MediaEntry.FromOSD(osdMe) : new MediaEntry())))
                        {
                            Add(me);
                        }

                        xtr.ReadEndElement();
                    }
                }
            }
Пример #4
0
        private byte[] GetObjectPhysicsData(UUID agentID, Stream request)
        {
            OSDMap rm = (OSDMap)OSDParser.DeserializeLLSDXml(request);

            OSDArray keys = (OSDArray)rm["object_ids"];

            IEventQueueService eqs = m_scene.RequestModuleInterface <IEventQueueService>();

            if (eqs != null)
            {
#if (!ISWIN)
                List <ISceneChildEntity> list = new List <ISceneChildEntity>();
                foreach (OSD key in keys)
                {
                    list.Add(m_scene.GetSceneObjectPart(key.AsUUID()));
                }
                eqs.ObjectPhysicsProperties(list.ToArray(),
                                            agentID, m_scene.RegionInfo.RegionHandle);
#else
                eqs.ObjectPhysicsProperties(keys.Select(key => m_scene.GetSceneObjectPart(key.AsUUID())).ToArray(), agentID, m_scene.RegionInfo.RegionHandle);
#endif
            }
            //Send back data
            return(new byte[0]);
        }
Пример #5
0
        private byte[] GetObjectPhysicsData(UUID agentID, Stream request)
        {
            OSDMap rm = (OSDMap)OSDParser.DeserializeLLSDXml(HttpServerHandlerHelpers.ReadFully(request));

            OSDArray keys = (OSDArray)rm["object_ids"];

            IEventQueueService eqs = m_scene.RequestModuleInterface <IEventQueueService>();

            if (eqs != null)
            {
                eqs.ObjectPhysicsProperties(keys.Select(key => m_scene.GetSceneObjectPart(key.AsUUID())).ToArray(),
                                            agentID, m_scene.RegionInfo.RegionID);
            }
            //Send back data
            return(new byte[0]);
        }
Пример #6
0
        public List <UserAccount> GetUserAccounts(UUID scopeID, string query)
        {
            List <UserAccount> accounts = new List <UserAccount>();

            MainConsole.Instance.DebugFormat("[SIMIAN ACCOUNT CONNECTOR]: Searching for user accounts with name query " + query);

            NameValueCollection requestArgs = new NameValueCollection
            {
                { "RequestMethod", "GetUsers" },
                { "NameQuery", query }
            };

            OSDMap response = WebUtils.PostToService(m_serverUrl, requestArgs);

            if (response["Success"].AsBoolean())
            {
                OSDArray array = response["Users"] as OSDArray;
                if (array != null && array.Count > 0)
                {
#if (!ISWIN)
                    for (int i = 0; i < array.Count; i++)
                    {
                        UserAccount account = ResponseToUserAccount(array[i] as OSDMap);
                        if (account != null)
                        {
                            accounts.Add(account);
                        }
                    }
#else
                    accounts.AddRange(array.Select(t => ResponseToUserAccount(t as OSDMap)).Where(account => account != null));
#endif
                }
                else
                {
                    MainConsole.Instance.Warn(
                        "[SIMIAN ACCOUNT CONNECTOR]: Account search failed, response data was in an invalid format");
                }
            }
            else
            {
                MainConsole.Instance.Warn("[SIMIAN ACCOUNT CONNECTOR]: Failed to search for account data by name " + query);
            }

            return(accounts);
        }
Пример #7
0
        public string[] GetAgentsLocations(string requestor, string[] userIDs)
        {
            List <string> urls =
                m_registry.RequestModuleInterface <IConfigurationService>().FindValueOf("AgentInfoServerURI");
            List <string> retVal = new List <string>(userIDs.Length);

            foreach (string url in urls)
            {
                OSDMap   request      = new OSDMap();
                OSDArray requestArray = new OSDArray();
                foreach (string t in userIDs)
                {
                    requestArray.Add(t);
                }

                request["userIDs"]   = requestArray;
                request["requestor"] = requestor;
                request["Method"]    = "GetAgentsLocations";
                OSDMap result = WebUtils.PostToService(url, request, true, false);
                try
                {
                    OSD r = OSDParser.DeserializeJson(result["_RawResult"]);
                    if (r is OSDMap)
                    {
                        OSDMap   innerresult = (OSDMap)r;
                        OSDArray resultArray = (OSDArray)innerresult["Result"];
#if (!ISWIN)
                        foreach (OSD o in resultArray)
                        {
                            retVal.Add(o.AsString());
                        }
#else
                        retVal.AddRange(resultArray.Select(o => o.AsString()));
#endif
                    }
                }
                catch
                {
                    //Bad request, just leave it
                }
            }
            return(retVal.ToArray());
        }
Пример #8
0
        public List <GridRegion> GetRegionsByName(UUID scopeID, string name, int maxNumber)
        {
            List <GridRegion> foundRegions = new List <GridRegion>();

            NameValueCollection requestArgs = new NameValueCollection
            {
                { "RequestMethod", "GetScenes" },
                { "NameQuery", name },
                { "Enabled", "1" }
            };

            if (maxNumber > 0)
            {
                requestArgs["MaxNumber"] = maxNumber.ToString();
            }

            OSDMap response = WebUtils.PostToService(m_serverUrl, requestArgs);

            if (response["Success"].AsBoolean())
            {
                OSDArray array = response["Scenes"] as OSDArray;
                if (array != null)
                {
#if (!ISWIN)
                    for (int i = 0; i < array.Count; i++)
                    {
                        GridRegion region = ResponseToGridRegion(array[i] as OSDMap);
                        if (region != null)
                        {
                            foundRegions.Add(region);
                        }
                    }
#else
                    foundRegions.AddRange(array.Select(t => ResponseToGridRegion(t as OSDMap)).Where(region => region != null));
#endif
                }
            }

            return(foundRegions);
        }
Пример #9
0
        public List <GridRegion> GetRegionRange(UUID scopeID, int xmin, int xmax, int ymin, int ymax)
        {
            List <GridRegion> foundRegions = new List <GridRegion>();

            Vector3d minPosition = new Vector3d(xmin, ymin, 0.0);
            Vector3d maxPosition = new Vector3d(xmax, ymax, 4096.0);

            NameValueCollection requestArgs = new NameValueCollection
            {
                { "RequestMethod", "GetScenes" },
                { "MinPosition", minPosition.ToString() },
                { "MaxPosition", maxPosition.ToString() },
                { "Enabled", "1" }
            };

            OSDMap response = WebUtils.PostToService(m_serverUrl, requestArgs);

            if (response["Success"].AsBoolean())
            {
                OSDArray array = response["Scenes"] as OSDArray;
                if (array != null)
                {
#if (!ISWIN)
                    for (int i = 0; i < array.Count; i++)
                    {
                        GridRegion region = ResponseToGridRegion(array[i] as OSDMap);
                        if (region != null)
                        {
                            foundRegions.Add(region);
                        }
                    }
#else
                    foundRegions.AddRange(array.Select(t => ResponseToGridRegion(t as OSDMap)).Where(region => region != null));
#endif
                }
            }

            return(foundRegions);
        }
Пример #10
0
        ///<summary>
        ///</summary>
        ///<param name = "assetID"></param>
        ///<param name = "inventoryItem"></param>
        ///<param name = "data"></param>
        public UUID UploadCompleteHandler(string assetName, string assetDescription, UUID assetID,
                                          UUID inventoryItem, UUID parentFolder, byte[] data, string inventoryType,
                                          string assetType, uint everyone_mask, uint group_mask, uint next_owner_mask)
        {
            sbyte assType = 0;
            sbyte inType  = 0;

            if (inventoryType == "sound")
            {
                inType  = 1;
                assType = 1;
            }
            else if (inventoryType == "animation")
            {
                inType  = 19;
                assType = 20;
            }
            else if (inventoryType == "snapshot")
            {
                inType  = 15;
                assType = 0;
            }
            else if (inventoryType == "wearable")
            {
                inType = 18;
                switch (assetType)
                {
                case "bodypart":
                    assType = 13;
                    break;

                case "clothing":
                    assType = 5;
                    break;
                }
            }
            else if (inventoryType == "object")
            {
                inType  = (sbyte)InventoryType.Object;
                assType = (sbyte)AssetType.Object;

                List <Vector3>    positions     = new List <Vector3>();
                List <Quaternion> rotations     = new List <Quaternion>();
                OSDMap            request       = (OSDMap)OSDParser.DeserializeLLSDXml(data);
                OSDArray          instance_list = (OSDArray)request["instance_list"];
                OSDArray          mesh_list     = (OSDArray)request["mesh_list"];
                OSDArray          texture_list  = (OSDArray)request["texture_list"];
                SceneObjectGroup  grp           = null;

                List <UUID> textures = new List <UUID>();
#if (!ISWIN)
                for (int i = 0; i < texture_list.Count; i++)
                {
                    AssetBase textureAsset = new AssetBase(UUID.Random(), assetName, AssetType.Texture, m_service.AgentID);
                    textureAsset.Data = texture_list[i].AsBinary();
                    textureAsset.ID   = m_assetService.Store(textureAsset);
                    textures.Add(textureAsset.ID);
                }
#else
                foreach (AssetBase textureAsset in texture_list.Select(t => new AssetBase(UUID.Random(), assetName, AssetType.Texture,
                                                                                          m_service.AgentID)
                {
                    Data = t.AsBinary()
                }))
                {
                    textureAsset.ID = m_assetService.Store(textureAsset);
                    textures.Add(textureAsset.ID);
                }
#endif
                InventoryFolderBase meshFolder = m_inventoryService.GetFolderForType(m_service.AgentID,
                                                                                     InventoryType.Mesh, AssetType.Mesh);
                for (int i = 0; i < mesh_list.Count; i++)
                {
                    PrimitiveBaseShape pbs = PrimitiveBaseShape.CreateBox();

                    Primitive.TextureEntry textureEntry =
                        new Primitive.TextureEntry(Primitive.TextureEntry.WHITE_TEXTURE);
                    OSDMap inner_instance_list = (OSDMap)instance_list[i];

                    OSDArray face_list = (OSDArray)inner_instance_list["face_list"];
                    for (uint face = 0; face < face_list.Count; face++)
                    {
                        OSDMap faceMap = (OSDMap)face_list[(int)face];
                        Primitive.TextureEntryFace f = pbs.Textures.CreateFace(face);
                        if (faceMap.ContainsKey("fullbright"))
                        {
                            f.Fullbright = faceMap["fullbright"].AsBoolean();
                        }
                        if (faceMap.ContainsKey("diffuse_color"))
                        {
                            f.RGBA = faceMap["diffuse_color"].AsColor4();
                        }

                        int   textureNum = faceMap["image"].AsInteger();
                        float imagerot   = faceMap["imagerot"].AsInteger();
                        float offsets    = (float)faceMap["offsets"].AsReal();
                        float offsett    = (float)faceMap["offsett"].AsReal();
                        float scales     = (float)faceMap["scales"].AsReal();
                        float scalet     = (float)faceMap["scalet"].AsReal();

                        if (imagerot != 0)
                        {
                            f.Rotation = imagerot;
                        }
                        if (offsets != 0)
                        {
                            f.OffsetU = offsets;
                        }
                        if (offsett != 0)
                        {
                            f.OffsetV = offsett;
                        }
                        if (scales != 0)
                        {
                            f.RepeatU = scales;
                        }
                        if (scalet != 0)
                        {
                            f.RepeatV = scalet;
                        }
                        f.TextureID = textures.Count > textureNum ? textures[textureNum] : Primitive.TextureEntry.WHITE_TEXTURE;
                        textureEntry.FaceTextures[face] = f;
                    }
                    pbs.TextureEntry = textureEntry.GetBytes();

                    AssetBase meshAsset = new AssetBase(UUID.Random(), assetName, AssetType.Mesh, m_service.AgentID)
                    {
                        Data = mesh_list[i].AsBinary()
                    };
                    meshAsset.ID = m_assetService.Store(meshAsset);

                    if (meshFolder == null)
                    {
                        m_inventoryService.CreateUserInventory(m_service.AgentID, false);
                        meshFolder = m_inventoryService.GetFolderForType(m_service.AgentID, InventoryType.Mesh,
                                                                         AssetType.Mesh);
                    }

                    InventoryItemBase itemBase = new InventoryItemBase(UUID.Random(), m_service.AgentID)
                    {
                        AssetType           = (sbyte)AssetType.Mesh,
                        AssetID             = meshAsset.ID,
                        CreatorId           = m_service.AgentID.ToString(),
                        Folder              = meshFolder.ID,
                        InvType             = (int)InventoryType.Texture,
                        Name                = "(Mesh) - " + assetName,
                        CurrentPermissions  = (uint)PermissionMask.All,
                        BasePermissions     = (uint)PermissionMask.All,
                        EveryOnePermissions = everyone_mask,
                        GroupPermissions    = group_mask,
                        NextPermissions     = next_owner_mask
                    };
                    //Bad... but whatever
                    m_inventoryService.AddItem(itemBase);

                    pbs.SculptEntry   = true;
                    pbs.SculptTexture = meshAsset.ID;
                    pbs.SculptType    = (byte)SculptType.Mesh;
                    pbs.SculptData    = meshAsset.Data;

                    Vector3    position = inner_instance_list["position"].AsVector3();
                    Vector3    scale    = inner_instance_list["scale"].AsVector3();
                    Quaternion rotation = inner_instance_list["rotation"].AsQuaternion();

                    int physicsShapeType = inner_instance_list["physics_shape_type"].AsInteger();
                    int material         = inner_instance_list["material"].AsInteger();
                    int mesh             = inner_instance_list["mesh"].AsInteger();

                    UUID owner_id = m_service.AgentID;

                    IScene fakeScene = new Scene();
                    fakeScene.AddModuleInterfaces(m_service.Registry.GetInterfaces());

                    SceneObjectPart prim = new SceneObjectPart(owner_id, pbs, position, Quaternion.Identity,
                                                               Vector3.Zero, assetName, fakeScene)
                    {
                        Scale = scale, AbsolutePosition = position
                    };

                    rotations.Add(rotation);
                    positions.Add(position);
                    prim.UUID         = UUID.Random();
                    prim.CreatorID    = owner_id;
                    prim.OwnerID      = owner_id;
                    prim.GroupID      = UUID.Zero;
                    prim.LastOwnerID  = prim.OwnerID;
                    prim.CreationDate = Util.UnixTimeSinceEpoch();
                    prim.Name         = assetName;
                    prim.Description  = "";
                    prim.PhysicsType  = (byte)physicsShapeType;

                    prim.BaseMask      = (uint)PermissionMask.All;
                    prim.EveryoneMask  = everyone_mask;
                    prim.NextOwnerMask = next_owner_mask;
                    prim.GroupMask     = group_mask;
                    prim.OwnerMask     = (uint)PermissionMask.All;

                    if (grp == null)
                    {
                        grp = new SceneObjectGroup(prim, fakeScene);
                    }
                    else
                    {
                        grp.AddChild(prim, i + 1);
                    }
                    grp.RootPart.IsAttachment = false;
                }
                if (grp.ChildrenList.Count > 1) //Fix first link #
                {
                    grp.RootPart.LinkNum++;
                }

                Vector3 rootPos = positions[0];
                grp.SetAbsolutePosition(false, rootPos);
                for (int i = 0; i < positions.Count; i++)
                {
                    Vector3 offset = positions[i] - rootPos;
                    grp.ChildrenList[i].SetOffsetPosition(offset);
                    Vector3 abs        = grp.ChildrenList[i].AbsolutePosition;
                    Vector3 currentPos = positions[i];
                }
                //grp.Rotation = rotations[0];
                for (int i = 0; i < rotations.Count; i++)
                {
                    if (i != 0)
                    {
                        grp.ChildrenList[i].SetRotationOffset(false, rotations[i], false);
                    }
                }
                grp.UpdateGroupRotationR(rotations[0]);
                data = Encoding.ASCII.GetBytes(grp.ToXml2());
            }
            AssetBase asset = new AssetBase(assetID, assetName, (AssetType)assType, m_service.AgentID)
            {
                Data = data
            };
            asset.ID = m_assetService.Store(asset);
            assetID  = asset.ID;

            InventoryItemBase item = new InventoryItemBase
            {
                Owner               = m_service.AgentID,
                CreatorId           = m_service.AgentID.ToString(),
                ID                  = inventoryItem,
                AssetID             = asset.ID,
                Description         = assetDescription,
                Name                = assetName,
                AssetType           = assType,
                InvType             = inType,
                Folder              = parentFolder,
                CurrentPermissions  = (uint)PermissionMask.All,
                BasePermissions     = (uint)PermissionMask.All,
                EveryOnePermissions = everyone_mask,
                NextPermissions     = next_owner_mask,
                GroupPermissions    = group_mask,
                CreationDate        = Util.UnixTimeSinceEpoch()
            };

            m_inventoryService.AddItem(item);

            return(assetID);
        }
Пример #11
0
        private byte[] ProcessEnqueueEQMMessage(OSDMap request)
        {
            OSDMap response = new OSDMap();
            response["success"] = false;
            try
            {
                UUID agentID = request["AgentID"].AsUUID();
                ulong regionHandle = m_ourRegionHandle == 0 ? request["RegionHandle"].AsULong() : m_ourRegionHandle;
                OSDArray events = new OSDArray();
                if (request.ContainsKey("Events") && request["Events"].Type == OSDType.Array)
                    events = (OSDArray) request["Events"];

#if (!ISWIN)
                List<OSD> OSDEvents = new List<OSD>();
                foreach (OSD ev in events)
                    OSDEvents.Add(OSDParser.DeserializeLLSDXml(ev.AsString()));
#else
                List<OSD> OSDEvents = events.Select(ev => OSDParser.DeserializeLLSDXml(ev.AsString())).ToList();
#endif

                IClientCapsService clientCaps = m_capsService.GetClientCapsService(agentID);
                if (clientCaps != null)
                {
                    IRegionClientCapsService regionClient = clientCaps.GetCapsService(regionHandle);
                    if (regionClient != null)
                    {
                        bool enqueueResult = false;
                        foreach (OSD ev in OSDEvents)
                        {
                            enqueueResult = m_eventQueueService.Enqueue(ev, agentID, regionHandle);
                            if (!enqueueResult) //Break if one fails
                                break;
                        }
                        response["success"] = enqueueResult;
                    }
                    else
                        MainConsole.Instance.Error("[EQMHandler]: ERROR IN THE HANDLER, FAILED TO FIND CLIENT'S REGION");
                }
                else
                {
                    MainConsole.Instance.Error("[EQMHandler]: ERROR IN THE HANDLER, FAILED TO FIND CLIENT, IWC/HG OR BOT?");
                    bool enqueueResult = false;
                    foreach (OSD ev in OSDEvents)
                    {
                        enqueueResult = m_eventQueueService.Enqueue(ev, agentID, regionHandle);
                        if (!enqueueResult) //Break if one fails
                            break;
                    }
                    response["success"] = enqueueResult;
                }
            }
            catch (Exception ex)
            {
                MainConsole.Instance.Error("[EQMHandler]: ERROR IN THE HANDLER: " + ex);
                response = new OSDMap();
                response["success"] = false;
            }
            string resp = OSDParser.SerializeJsonString(response);
            if (resp == "")
                return MainServer.BlankResponse;
            return Util.UTF8.GetBytes(resp);
        }
Пример #12
0
        private byte[] ProcessEnqueueEQMMessage(OSDMap request)
        {
            OSDMap response = new OSDMap();

            response["success"] = false;
            try
            {
                UUID     agentID      = request["AgentID"].AsUUID();
                ulong    regionHandle = m_ourRegionHandle == 0 ? request["RegionHandle"].AsULong() : m_ourRegionHandle;
                OSDArray events       = new OSDArray();
                if (request.ContainsKey("Events") && request["Events"].Type == OSDType.Array)
                {
                    events = (OSDArray)request["Events"];
                }

#if (!ISWIN)
                List <OSD> OSDEvents = new List <OSD>();
                foreach (OSD ev in events)
                {
                    OSDEvents.Add(OSDParser.DeserializeLLSDXml(ev.AsString()));
                }
#else
                List <OSD> OSDEvents = events.Select(ev => OSDParser.DeserializeLLSDXml(ev.AsString())).ToList();
#endif

                IClientCapsService clientCaps = m_capsService.GetClientCapsService(agentID);
                if (clientCaps != null)
                {
                    IRegionClientCapsService regionClient = clientCaps.GetCapsService(regionHandle);
                    if (regionClient != null)
                    {
                        bool enqueueResult = false;
                        foreach (OSD ev in OSDEvents)
                        {
                            enqueueResult = m_eventQueueService.Enqueue(ev, agentID, regionHandle);
                            if (!enqueueResult) //Break if one fails
                            {
                                break;
                            }
                        }
                        response["success"] = enqueueResult;
                    }
                    else
                    {
                        MainConsole.Instance.Error("[EQMHandler]: ERROR IN THE HANDLER, FAILED TO FIND CLIENT'S REGION");
                    }
                }
                else
                {
                    MainConsole.Instance.Error("[EQMHandler]: ERROR IN THE HANDLER, FAILED TO FIND CLIENT, IWC?");
                    bool enqueueResult = false;
                    foreach (OSD ev in OSDEvents)
                    {
                        enqueueResult = m_eventQueueService.Enqueue(ev, agentID, regionHandle);
                        if (!enqueueResult) //Break if one fails
                        {
                            break;
                        }
                    }
                    response["success"] = enqueueResult;
                }
            }
            catch (Exception ex)
            {
                MainConsole.Instance.Error("[EQMHandler]: ERROR IN THE HANDLER: " + ex);
                response            = new OSDMap();
                response["success"] = false;
            }
            string resp = OSDParser.SerializeJsonString(response);
            if (resp == "")
            {
                return(new byte[0]);
            }
            return(Util.UTF8.GetBytes(resp));
        }
Пример #13
0
        public override void FromOSD(OSDMap v)
        {
            OSDMap values = (OSDMap)v;

            EstateID   = (uint)values["EstateID"].AsInteger();
            EstateName = values["EstateName"].AsString();
            AbuseEmailToEstateOwner = values["AbuseEmailToEstateOwner"].AsBoolean();
            DenyAnonymous           = values["DenyAnonymous"].AsBoolean();
            ResetHomeOnTeleport     = values["ResetHomeOnTeleport"].AsBoolean();
            FixedSun            = values["FixedSun"].AsBoolean();
            DenyTransacted      = values["DenyTransacted"].AsBoolean();
            BlockDwell          = values["BlockDwell"].AsBoolean();
            DenyIdentified      = values["DenyIdentified"].AsBoolean();
            AllowVoice          = values["AllowVoice"].AsBoolean();
            UseGlobalTime       = values["UseGlobalTime"].AsBoolean();
            PricePerMeter       = values["PricePerMeter"].AsInteger();
            TaxFree             = values["TaxFree"].AsBoolean();
            AllowDirectTeleport = values["AllowDirectTeleport"].AsBoolean();
            RedirectGridX       = values["RedirectGridX"].AsInteger();
            RedirectGridY       = values["RedirectGridY"].AsInteger();
            ParentEstateID      = (uint)values["ParentEstateID"].AsInteger();
            SunPosition         = values["SunPosition"].AsReal();
            EstateSkipScripts   = values["EstateSkipScripts"].AsBoolean();
            BillableFactor      = (float)values["BillableFactor"].AsReal();
            PublicAccess        = values["PublicAccess"].AsBoolean();
            AbuseEmail          = values["AbuseEmail"].AsString();
            EstateOwner         = values["EstateOwner"].AsUUID();
            AllowLandmark       = values["AllowLandmark"].AsBoolean();
            AllowParcelChanges  = values["AllowParcelChanges"].AsBoolean();
            AllowSetHome        = values["AllowSetHome"].AsBoolean();
            DenyMinors          = values["DenyMinors"].AsBoolean();

            OSDArray Managers = values["EstateManagers"] as OSDArray;

            if (Managers != null)
            {
#if (!ISWIN)
                List <UUID> list = new List <UUID>();
                foreach (OSD id in Managers)
                {
                    list.Add(id.AsUUID());
                }
                EstateManagers = list.ToArray();
#else
                EstateManagers = Managers.Select(id => id.AsUUID()).ToArray();
#endif
            }

            OSDArray Ban = values["EstateBans"] as OSDArray;
            if (Ban != null)
            {
                List <EstateBan> NewBan = new List <EstateBan>();
                foreach (OSD BannedUser in Ban)
                {
                    EstateBan ban = new EstateBan();
                    ban.FromOSD(BannedUser);
                    NewBan.Add(ban);
                }
                EstateBans = NewBan.ToArray();
            }

            OSDArray Access = values["EstateAccess"] as OSDArray;
            if (Access != null)
            {
#if (!ISWIN)
                List <UUID> list1 = new List <UUID>();
                foreach (OSD uuid in Access)
                {
                    list1.Add(uuid.AsUUID());
                }
                EstateAccess = list1.ToArray();
#else
                EstateAccess = Access.Select(uuid => uuid.AsUUID()).ToArray();
#endif
            }

            OSDArray Groups = values["EstateGroups"] as OSDArray;
            if (Groups != null)
            {
#if (!ISWIN)
                List <UUID> list2 = new List <UUID>();
                foreach (OSD uuid in Groups)
                {
                    list2.Add(uuid.AsUUID());
                }
                EstateGroups = list2.ToArray();
#else
                EstateGroups = Groups.Select(uuid => uuid.AsUUID()).ToArray();
#endif
            }
        }