public void RemoveMember(GuildMember Member, MySqlConnection con = null, bool BroadcastRemove = true) { lock (ThreadLocker) { var conCreated = con == null; if (conCreated) { con = Program.DatabaseManager.GetClient().GetConnection(); } //remove from db using (var cmd = con.CreateCommand()) { cmd.CommandText = "GuildMember_Remove"; cmd.Parameters.Add(new MySqlParameter("@pGuildID", ID)); cmd.Parameters.Add(new MySqlParameter("@pCharacterID", Member.Character.ID)); cmd.ExecuteNonQuery(); } //remove from list Members.Remove(Member); //update character Member.Character.Guild = null; Member.Character.GuildMember = null; Member.Character.GuildAcademy = null; //broadcast member left packet if (BroadcastRemove) { using (var packet = new Packet(SH29Type.GuildMemberLeft)) { packet.WriteString(Member.Character.Character.Name); Broadcast(packet); } //send packet to zones that a member has been removed using (var packet = new InterPacket(InterHeader.ZoneGuildMemberRemove)) { packet.WriteInt(ID); packet.WriteInt(Member.Character.ID); ZoneManager.Broadcast(packet); } } //clean up Member.Dispose(); if (conCreated) { con.Dispose(); } } }
public void AddMember(WorldCharacter Character, GuildRank Rank, MySqlConnection con = null, bool BroadcastAdd = true, bool SendGuildInfoToClient = true) { lock (ThreadLocker) { var conCreated = con == null; if (conCreated) { con = Program.DatabaseManager.GetClient().GetConnection(); } //add to db int result; using (var cmd = con.CreateCommand()) { cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "GuildMember_Create"; cmd.Parameters.Add(new MySqlParameter("@pGuildID", ID)); cmd.Parameters.Add(new MySqlParameter("@pCharacterID", Character.ID)); cmd.Parameters.Add(new MySqlParameter("@pRank", (byte)Rank)); cmd.Parameters.Add(new MySqlParameter("@pCorp", Convert.ToInt16("0"))); result = Convert.ToInt32(cmd.ExecuteScalar()); } if (result == -1) { return; } //create object var newMember = new GuildMember(this, Character, Rank, 0); //update character Character.Guild = this; Character.GuildMember = newMember; Character.GuildAcademy = Academy; //add to list Members.Add(newMember); if (BroadcastAdd) { newMember.BroadcastGuildName(); //broadcast that guild member joined using (var packet = new Packet(SH29Type.GuildMemberJoined)) { newMember.WriteInfo(packet); Broadcast(packet, newMember); } using (var packet = new Packet(SH29Type.GuildMemberLoggedIn)) { packet.WriteString(newMember.Character.Character.Name, 16); Broadcast(packet, newMember); } //let zone know that a new member has been added to guild using (var packet = new InterPacket(InterHeader.ZoneGuildMemberAdd)) { packet.WriteInt(ID); packet.WriteInt(Character.ID); packet.WriteByte((byte)newMember.Rank); packet.WriteUShort(newMember.Corp); ZoneManager.Broadcast(packet); } } //send guild info to new member if (SendGuildInfoToClient) { SendMemberList(newMember.Character.Client); using (var packet = new Packet(SH4Type.CharacterGuildinfo)) { WriteGuildInfo(packet); newMember.Character.Client.SendPacket(packet); } } if (conCreated) { con.Dispose(); } } }