/// <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> /// 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); } }
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="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); } }