/// <summary> /// Sends a request to the simulator to return a list of objects owned by specific owners /// </summary> /// <param name="localID">Simulator local ID of parcel</param> /// <param name="selectType">Owners, Others, Etc</param> /// <param name="ownerID">List containing keys of avatars objects to select; /// if List is null will return Objects of type <c>selectType</c></param> /// <remarks>Response data is returned in the event <seealso cref="E:OnParcelSelectedObjects"/></remarks> public void RequestSelectObjects(int localID, ObjectReturnType selectType, UUID ownerID) { ParcelSelectObjectsPacket select = new ParcelSelectObjectsPacket(); select.AgentData.AgentID = Client.Self.AgentID; select.AgentData.SessionID = Client.Self.SessionID; select.ParcelData.LocalID = localID; select.ParcelData.ReturnType = (uint)selectType; select.ReturnIDs = new ParcelSelectObjectsPacket.ReturnIDsBlock[1]; select.ReturnIDs[0] = new ParcelSelectObjectsPacket.ReturnIDsBlock(); select.ReturnIDs[0].ReturnID = ownerID; Client.Network.SendPacket(select); }
/// <summary> /// Return objects from a parcel /// </summary> /// <param name="simulator">Simulator parcel is in</param> /// <param name="localID">The parcels region specific local ID</param> /// <param name="type">the type of objects to return, <seealso cref="T:OpenMetaverse.ObjectReturnType"/></param> /// <param name="ownerIDs">A list containing object owners <seealso cref="OpenMetaverse.UUID"/>s to return</param> public void ReturnObjects(Simulator simulator, int localID, ObjectReturnType type, List<UUID> ownerIDs) { ParcelReturnObjectsPacket request = new ParcelReturnObjectsPacket(); request.AgentData.AgentID = Client.Self.AgentID; request.AgentData.SessionID = Client.Self.SessionID; request.ParcelData.LocalID = localID; request.ParcelData.ReturnType = (uint)type; // A single null TaskID is (not) used for parcel object returns request.TaskIDs = new ParcelReturnObjectsPacket.TaskIDsBlock[1]; request.TaskIDs[0] = new ParcelReturnObjectsPacket.TaskIDsBlock(); request.TaskIDs[0].TaskID = UUID.Zero; // Convert the list of owner UUIDs to packet blocks if a list is given if (ownerIDs != null) { request.OwnerIDs = new ParcelReturnObjectsPacket.OwnerIDsBlock[ownerIDs.Count]; for (int i = 0; i < ownerIDs.Count; i++) { request.OwnerIDs[i] = new ParcelReturnObjectsPacket.OwnerIDsBlock(); request.OwnerIDs[i].OwnerID = ownerIDs[i]; } } else { request.OwnerIDs = new ParcelReturnObjectsPacket.OwnerIDsBlock[0]; } Client.Network.SendPacket(request, simulator); }
private void ParcelSelectObjectsHandler(Packet packet, LLAgent agent) { ParcelSelectObjectsPacket select = (ParcelSelectObjectsPacket)packet; SceneParcel parcel; if (m_parcels.TryGetParcel(select.ParcelData.LocalID, out parcel)) { ObjectReturnType type = (ObjectReturnType)select.ParcelData.ReturnType; Predicate <ISceneEntity> selectFilter; switch (type) { case ObjectReturnType.Owner: selectFilter = delegate(ISceneEntity e) { if (e is ILinkable && ((ILinkable)e).Parent != null) { return(false); } return(e.OwnerID == parcel.OwnerID); }; break; case ObjectReturnType.Group: // FIXME: Need to track group deeding to implement this selectFilter = delegate(ISceneEntity e) { if (e is ILinkable && ((ILinkable)e).Parent != null) { return(false); } return(e.GroupID == parcel.GroupID); }; break; case ObjectReturnType.Other: // FIXME: Need to track group deeding to implement this selectFilter = delegate(ISceneEntity e) { if (e is ILinkable && ((ILinkable)e).Parent != null) { return(false); } return(e.OwnerID != parcel.OwnerID); }; break; case ObjectReturnType.Sell: selectFilter = delegate(ISceneEntity e) { if (e is ILinkable && ((ILinkable)e).Parent != null) { return(false); } return(e is LLPrimitive && ((LLPrimitive)e).Prim.Properties.SaleType != SaleType.Not); }; break; case ObjectReturnType.List: HashSet <UUID> selectIDs = new HashSet <UUID>(); for (int i = 0; i < select.ReturnIDs.Length; i++) { selectIDs.Add(select.ReturnIDs[i].ReturnID); } selectFilter = delegate(ISceneEntity e) { return(selectIDs.Contains(e.ID)); }; break; case ObjectReturnType.None: default: m_log.Warn(agent.Name + " sent an unrecognized select objects command " + type); return; } // FIXME: What packet do we return? } else { m_log.Warn(agent.Name + " tried to select objects on unknown parcel " + select.ParcelData.LocalID); } }
/// <summary> /// Sends a request to the simulator to return a list of objects owned by specific owners /// </summary> /// <param name="localID">Simulator local ID of parcel</param> /// <param name="selectType">Owners, Others, Etc</param> /// <param name="ownerID">List containing keys of avatars objects to select; /// if List is null will return Objects of type <c>selectType</c></param> /// <remarks>Response data is returned in the event <seealso cref="E:OnParcelSelectedObjects"/></remarks> public void SelectObjects(int localID, ObjectReturnType selectType, UUID ownerID) { if (OnParcelSelectedObjects != null) { ParcelSelectObjectsPacket select = new ParcelSelectObjectsPacket(); select.AgentData.AgentID = Network.AgentID; select.AgentData.SessionID = Network.SessionID; select.ParcelData.LocalID = localID; select.ParcelData.ReturnType = (uint)selectType; select.ReturnIDs = new ParcelSelectObjectsPacket.ReturnIDsBlock[1]; select.ReturnIDs[0] = new ParcelSelectObjectsPacket.ReturnIDsBlock(); select.ReturnIDs[0].ReturnID = ownerID; Network.SendPacket(select); } }
/// <summary> /// Sends a request to the simulator to return a list of objects owned by specific owners /// </summary> /// <param name="localID">Simulator local ID of parcel</param> /// <param name="selectType">Owners, Others, Etc</param> /// <param name="ownerIDs">List containing keys of avatars objects to select; /// if List is null will return Objects of type <c>selectType</c></param> /// <remarks>Response data is returned in the event <seealso cref="E:OnParcelSelectedObjects"/></remarks> public void SelectObjects(int localID, ObjectReturnType selectType, List<LLUUID> ownerIDs) { if (OnParcelSelectedObjects != null) { ParcelSelectObjectsPacket select = new ParcelSelectObjectsPacket(); select.AgentData.AgentID = Client.Self.AgentID; select.AgentData.SessionID = Client.Self.SessionID; select.ParcelData.LocalID = localID; select.ParcelData.ReturnType = (uint)selectType; if (ownerIDs != null) { select.ReturnIDs = new ParcelSelectObjectsPacket.ReturnIDsBlock[ownerIDs.Count]; for (int i = 0; i < ownerIDs.Count; i++) { select.ReturnIDs[i] = new ParcelSelectObjectsPacket.ReturnIDsBlock(); select.ReturnIDs[i].ReturnID = ownerIDs[i]; } } else { select.ReturnIDs = new ParcelSelectObjectsPacket.ReturnIDsBlock[0]; } Client.Network.SendPacket(select); } }
internal HashTableEnumerator(HashTable hashtable, ObjectReturnType returnType) { _hashtable = hashtable; _index = hashtable.Data?.Length ?? -1; _objectReturnType = returnType; }