/// <summary> /// Assign an avatar to a role /// </summary> /// <param name="group">Group to update</param> /// <param name="role">Role to assign to</param> /// <param name="member">Avatar to assign</param> public void AddToRole(LLUUID group, LLUUID role, LLUUID member) { libsecondlife.Packets.GroupRoleChangesPacket grc = new GroupRoleChangesPacket(); grc.AgentData.AgentID = Client.Self.AgentID; grc.AgentData.SessionID = Client.Self.SessionID; grc.AgentData.GroupID = group; grc.RoleChange = new GroupRoleChangesPacket.RoleChangeBlock[1]; grc.RoleChange[0] = new GroupRoleChangesPacket.RoleChangeBlock(); //Add to members and role grc.RoleChange[0].MemberID = member; grc.RoleChange[0].RoleID = role; //0 = Add to Role grc.RoleChange[0].Change = 0; Client.Network.SendPacket(grc); }
/// <summary>Remove an avatar from a role</summary> /// <param name="group">Group ID to update</param> /// <param name="role">Role ID to be removed from</param> /// <param name="member">Avatar's Key to remove</param> public void RemoveFromRole(UUID group, UUID role, UUID member) { OpenMetaverse.Packets.GroupRoleChangesPacket grc = new GroupRoleChangesPacket(); grc.AgentData.AgentID = Client.Self.AgentID; grc.AgentData.SessionID = Client.Self.SessionID; grc.AgentData.GroupID = group; grc.RoleChange = new GroupRoleChangesPacket.RoleChangeBlock[1]; grc.RoleChange[0] = new GroupRoleChangesPacket.RoleChangeBlock(); //Add to members and role grc.RoleChange[0].MemberID = member; grc.RoleChange[0].RoleID = role; //1 = Remove From Role TODO: this should be in an enum grc.RoleChange[0].Change = 1; Client.Network.SendPacket(grc); }
private void UpdateMemberRoles() { EnhancedGroupMember m = (EnhancedGroupMember)lvwAssignedRoles.Tag; GroupRoleChangesPacket p = new GroupRoleChangesPacket(); p.AgentData.AgentID = client.Self.AgentID; p.AgentData.SessionID = client.Self.SessionID; p.AgentData.GroupID = group.ID; List<GroupRoleChangesPacket.RoleChangeBlock> changes = new List<GroupRoleChangesPacket.RoleChangeBlock>(); foreach (ListViewItem item in lvwAssignedRoles.Items) { if (!(item.Tag is GroupRole)) continue; GroupRole role = (GroupRole)item.Tag; var foundRole = roleMembers.Find((KeyValuePair<UUID, UUID> kvp) => { return kvp.Value == m.Base.ID && kvp.Key == role.ID; }); bool hasRole = foundRole.Value == m.Base.ID; if (item.Checked != hasRole) { if (item.Checked) roleMembers.Add(new KeyValuePair<UUID, UUID>(role.ID, m.Base.ID)); else roleMembers.Remove(foundRole); var rc = new GroupRoleChangesPacket.RoleChangeBlock(); rc.MemberID = m.Base.ID; rc.RoleID = role.ID; rc.Change = item.Checked ? 0u : 1u; changes.Add(rc); } } if (changes.Count > 0) { p.RoleChange = changes.ToArray(); client.Network.CurrentSim.SendPacket(p); } btnApply.Enabled = false; lvwMemberDetails_SelectedIndexChanged(lvwMemberDetails, EventArgs.Empty); }