public static void Broadcast(WorldConnector pConnector, InterPacket pPacket) { int packetlenght; byte[] packet; string charname; if (!pPacket.TryReadString(out charname, 16)) return; if (!pPacket.TryReadInt(out packetlenght)) return; if (!pPacket.TryReadBytes(packetlenght, out packet)) return; ZoneClient pClient = ClientManager.Instance.GetClientByCharName(charname); if (pClient == null) return; using (var ipacket = new InterPacket(InterHeader.SendBroiadCastList)) { List<ZoneCharacter> Sender = pClient.Character.Map.GetCharactersBySectors(pClient.Character.MapSector.SurroundingSectors); if (Sender.Count == 0) return; ipacket.WriteInt(packetlenght); ipacket.WriteBytes(packet); ipacket.WriteInt(Sender.Count); foreach (var character in Sender) { ipacket.WriteString(character.Name,16); } pConnector.SendPacket(ipacket); } }
public static void RemoveBuff(AbStateInfo AbState, params WorldCharacter[] Receiver) { using (var packet = new InterPacket(InterHeader.ZONE_CharacterRemoveBuff)) { packet.WriteUShort(AbState.ID); packet.WriteInt(Receiver.Length); Array.ForEach(Receiver, ch => packet.WriteInt(ch.ID)); ZoneManager.Instance.Broadcast(packet); } }
public void SendData() { using (var packet = new InterPacket(InterHeader.Assigned)) { packet.WriteByte(ID); packet.WriteStringLen(String.Format("{0}-{1}", Settings.Instance.GameServiceUri, ID)); packet.WriteUShort((ushort)(Settings.Instance.ZoneBasePort + ID)); packet.WriteInt(Maps.Count); foreach (var m in Maps) { packet.WriteUShort(m.ID); packet.WriteStringLen(m.ShortName); packet.WriteStringLen(m.FullName); packet.WriteInt(m.RegenX); packet.WriteInt(m.RegenY); packet.WriteByte(m.Kingdom); packet.WriteUShort(m.ViewRange); } this.SendPacket(packet); } }
public void SendTransferClientFromWorld(int accountID, string userName, byte admin, string hostIP, string hash) { using (var packet = new InterPacket(InterHeader.Clienttransfer)) { packet.WriteByte(0); packet.WriteInt(accountID); packet.WriteStringLen(userName); packet.WriteStringLen(hash); packet.WriteByte(admin); packet.WriteStringLen(hostIP); this.SendPacket(packet); } }
public void SendTransferClientFromZone(int accountID, string userName, string charName,int CharID, ushort randid, byte admin, string hostIP) { using (var packet = new InterPacket(InterHeader.Clienttransfer)) { packet.WriteByte(1); packet.WriteInt(accountID); packet.WriteStringLen(userName); packet.WriteStringLen(charName); packet.WriteInt(CharID); packet.WriteUShort(randid); packet.WriteByte(admin); packet.WriteStringLen(hostIP); this.SendPacket(packet); } }
public static void BanAccount(ZoneConnection zc, InterPacket packet) { string playername; if (packet.TryReadString(out playername, 16)) { WorldClient bannclient = ClientManager.Instance.GetClientByCharname(playername); if (bannclient != null) { using (var p = new InterPacket(InterHeader.BanAccount)) { p.WriteInt(bannclient.AccountID); LoginConnector.Instance.SendPacket(p); } bannclient.Disconnect(); } } }
public static void On_GameClient_UpdateGuildMessage(WorldClient Client, Packet Packet) { ushort length; string message; if (Client.Character.Guild == null || !Packet.TryReadUShort(out length) || !Packet.TryReadString(out message, length)) { return; } //response packets using (var packet = new Packet(SH29Type.UnkMessageChange)) { packet.WriteHexAsBytes("68 1B 00 92 AD F8 4F 2E 00 00 00 2B 00 00 00 17 00 00 00 07 00 00 00 06 00 00 00 70 00 00 00 06 00 00 00 BC 00 00 00 01 00 00 00 00 00"); Client.SendPacket(packet); } using (var packet = new Packet(SH29Type.ClearGuildDetailsMessage)) { packet.WriteUShort(3137); packet.WriteLong(0); Client.SendPacket(packet); } using (var packet = new Packet(SH29Type.UpdateGuildMessageResponse)) { packet.WriteUShort(3137); Client.SendPacket(packet); } //update guild lock (Client.Character.Guild.ThreadLocker) { Client.Character.Guild.Message = message; Client.Character.Guild.MessageCreater = Client.Character; Client.Character.Guild.MessageCreateTime = Program.CurrentTime; Client.Character.Guild.Save(); //broadcast packet to all guild members using (var packet = new Packet(SH29Type.SendUpdateGuildDetails)) { packet.Fill(4, 0x00); packet.WriteInt(Client.Character.Guild.MessageCreateTime.Second); packet.WriteInt(Client.Character.Guild.MessageCreateTime.Minute); packet.WriteInt(Client.Character.Guild.MessageCreateTime.Hour); packet.WriteInt(Client.Character.Guild.MessageCreateTime.Day); packet.WriteInt(Client.Character.Guild.MessageCreateTime.Month - 1); packet.WriteInt(Client.Character.Guild.MessageCreateTime.Year - 1900); packet.WriteInt(0); packet.WriteLong(0); packet.WriteString(Client.Character.Character.Name, 16); packet.WriteUShort(length); packet.WriteString(message, length); Client.Character.Guild.Broadcast(packet); } //send packet to zone that guild message changed using (var packet = new InterPacket(InterHeader.ZONE_GuildMessageUpdate)) { packet.WriteInt(Client.Character.Guild.ID); packet.WriteInt(Client.Character.ID); packet.WriteDateTime(Client.Character.Guild.MessageCreateTime); packet.WriteUShort(length); packet.WriteString(message, length); ZoneManager.Instance.Broadcast(packet); } } }
public static void SendGetCharacterBroaucast(WorldCharacter pChar,FiestaLib.Networking.Packet pPacket) { ZoneConnection conn = Program.GetZoneByMap(pChar.Character.PositionInfo.Map); using (var packet = new InterPacket(InterHeader.GetBroadcastList)) { packet.WriteString(pChar.Character.Name, 16); packet.WriteInt(pPacket.ToNormalArray().Length); packet.WriteBytes(pPacket.ToNormalArray()); conn.SendPacket(packet); } }
public static void On_GameClient_CreateGuild(WorldClient Client, Packet Packet) { string name, password; bool allowGuildWar; if (!Packet.TryReadString(out name, 16) || !Packet.TryReadString(out password, 8) || !Packet.ReadSkip(4) // unk ? || !Packet.TryReadBool(out allowGuildWar)) { return; } GuildCreateResponse response; if (Client.Character.Character.CharLevel < 20) { response = GuildCreateResponse.LevelTooLow; } else if (Client.Character.Character.Money < Guild.Price) { response = GuildCreateResponse.MoneyTooLow; } else { //encrypt guild pw var pwData = Encoding.UTF8.GetBytes(password); // InterCrypto.Encrypt(ref pwData, 0, pwData.Length); Guild guild; //try to create guild lock (ThreadLocker) { int result; int guildID; var createTime = Program.CurrentTime; using (var con = Program.DatabaseManager.GetClient().GetConnection()) { //insert guild in db using (var cmd = con.CreateCommand()) { cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "Guild_Create"; cmd.Parameters.Add(new MySqlParameter("@pName", name)); cmd.Parameters.Add(new MySqlParameter("@pPassword", pwData)); cmd.Parameters.Add(new MySqlParameter("@pAllowGuildWar", allowGuildWar)); cmd.Parameters.Add(new MySqlParameter("@pCreaterID", Client.Character.ID)); cmd.Parameters.Add(new MySqlParameter("@pCreateTime", createTime)); var idParam = cmd.Parameters.Add(new MySqlParameter("@pID", SqlDbType.Int) { Direction = ParameterDirection.Output }); result = Convert.ToInt32(cmd.ExecuteScalar()); guildID = (int)idParam.Value; } switch (result) { case -1: //guild name already exists (ToDo: get response code) SendGuildCreateResponse(Client, name, password, allowGuildWar, GuildCreateResponse.AlredyExist); return; case -2: //database error @ insert guild (ToDo: get response code) SendGuildCreateResponse(Client, name, password, allowGuildWar, GuildCreateResponse.Failed); return; case -3: //database error @ insert guild academy (ToDo: get response code) SendGuildCreateResponse(Client, name, password, allowGuildWar, GuildCreateResponse.Failed); return; case 0: //create guild guild = new Guild(con, guildID, name, pwData, allowGuildWar, Client.Character, createTime); //insert guild master (character will get updated) guild.AddMember(Client.Character, GuildRank.Master, con, false, false); //add to loaded guilds LoadedGuilds.Add(guild); break; default: return; } } } Client.Character. //revoke money Client.Character.ChangeMoney(Client.Character.Character.Money - Guild.Price); //let character broadcast guild name packet using (var packet = new Packet(SH29Type.GuildNameResult)) { packet.WriteInt(guild.ID); packet.WriteString(guild.Name, 16); BroadcastManager.Instance.BroadcastInRange(Client.Character, packet, true); } //let zone know that a guild has been loaded using (var packet = new InterPacket(InterHeader.ZONE_GuildCreated)) { packet.WriteInt(guild.ID); packet.WriteInt(Client.Character.ID); ZoneManager.Instance.Broadcast(packet); } //set response to success response = GuildCreateResponse.Success; } SendGuildCreateResponse(Client, name, password, allowGuildWar, response); }
public void AddMember(WorldCharacter Character, GuildAcademyRank Rank) { if (Character.Character.CharLevel < 10 || Character.Character.CharLevel > 60) return; if (Character.IsInGuild || Character.IsInGuildAcademy) { Handlers.Handler38.SendAcademyResponse(Character.Client, Guild.Name, GuildAcademyResponse.AlreadyInAcademy); return; } lock (Guild.ThreadLocker) { if (Members.Count >= MaxMembers) { Handlers.Handler38.SendAcademyResponse(Character.Client, Guild.Name, GuildAcademyResponse.AcademyFull); return; } var registerDate = Program.CurrentTime; //add to sql using (var con = Program.DatabaseManager.GetClient().GetConnection()) { using (var cmd = con.CreateCommand()) { cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "GuildAcademyMember_Create"; cmd.Parameters.Add(new MySqlParameter("@pGuildID", Guild.ID)); cmd.Parameters.Add(new MySqlParameter("@pCharacterID", Character.ID)); cmd.Parameters.Add(new MySqlParameter("@pRegisterDate", registerDate)); cmd.Parameters.Add(new MySqlParameter("@pRank", (byte)Rank)); switch (Convert.ToInt32(cmd.ExecuteScalar())) { case 0: var member = new GuildAcademyMember(this, Character, registerDate, Rank); //Add to list Members.Add(member); //Update character Character.Guild = Guild; Character.GuildAcademy = this; Character.GuildAcademyMember = member; //send packets to client Handlers.Handler38.SendAcademyResponse(Character.Client, Guild.Name, GuildAcademyResponse.JoinSuccess); using (var packet = new Packet(SH4Type.CharacterGuildacademyinfo)) { WriteInfo(packet); Character.Client.SendPacket(packet); } member.BroadcastGuildName(); using (var packet = new Packet(SH38Type.AcademyMemberJoined)) { member.WriteInfo(packet); Broadcast(packet); Guild.Broadcast(packet); } //send packet to zones using (var packet = new InterPacket(InterHeader.ZONE_AcademyMemberJoined)) { packet.WriteInt(Guild.ID); packet.WriteInt(Character.ID); packet.WriteDateTime(registerDate); ZoneManager.Instance.Broadcast(packet); } break; case -1: Handlers.Handler38.SendAcademyResponse(Character.Client, Guild.Name, GuildAcademyResponse.AlreadyInAcademy); return; case -2: default: Handlers.Handler38.SendAcademyResponse(Character.Client, Guild.Name, GuildAcademyResponse.DatabaseError); return; } } } } }
public static void SendZoneList(ZoneConnection zc) { using (var packet = new InterPacket(InterHeader.Zonelist)) { packet.Write(Program.Zones.Values.Count); foreach (var z in Program.Zones.Values) { packet.Write(z.ID); packet.Write(z.IP); packet.Write(z.Port); packet.WriteInt(z.Maps.Count); foreach (var m in z.Maps) { packet.WriteUShort(m.ID); packet.WriteStringLen(m.ShortName); packet.WriteStringLen(m.FullName); packet.WriteInt(m.RegenX); packet.WriteInt(m.RegenY); packet.WriteByte(m.Kingdom); packet.WriteUShort(m.ViewRange); } } zc.SendPacket(packet); } }
public void UpdateMemberRank(GuildMember Member, GuildRank NewRank) { Member.Rank = NewRank; Member.Save(); //broadcast to members using (var packet = new Packet(SH29Type.UpdateGuildMemberRank)) { packet.WriteString(Member.Character.Character.Name, 16); packet.WriteByte((byte)NewRank); Broadcast(packet); } //broadcast to zones using (var packet = new InterPacket(InterHeader.ZONE_GuildMemberRankUpdate)) { packet.WriteInt(ID); packet.WriteInt(Member.Character.ID); packet.WriteByte((byte)NewRank); ZoneManager.Instance.Broadcast(packet); } }
public void RemoveMember(GuildAcademyMember Member) { lock (Guild.ThreadLocker) { //remove from db using (var con = Program.DatabaseManager.GetClient().GetConnection()) { using (var cmd = con.CreateCommand()) { cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "GuildAcademyMember_Remove"; cmd.Parameters.Add(new MySqlParameter("@pGuildID", Guild.ID)); cmd.Parameters.Add(new MySqlParameter("@pCharacterID", Member.Character.ID)); cmd.ExecuteNonQuery(); } } //remove from list Members.Remove(Member); //clean character Member.Character.Guild = null; Member.Character.GuildAcademy = null; Member.Character.GuildAcademyMember = null; //send packets using (var packet = new Packet(SH38Type.LeaveAcademyResponse)) { packet.WriteUShort((ushort)GuildAcademyResponse.LeaveSuccess); Member.Character.Client.SendPacket(packet); } using (var packet = new Packet(SH38Type.AcademyMemberLeft)) { packet.WriteString(Member.Character.Character.Name, 16); Broadcast(packet); Guild.Broadcast(packet); } //send packet to zones using (var packet = new InterPacket(InterHeader.ZONE_AcademyMemberLeft)) { packet.WriteInt(Guild.ID); packet.WriteInt(Member.Character.ID); ZoneManager.Instance.Broadcast(packet); } //clean up Member.Dispose(); } }
public static void SendZoneStarted(byte zoneid, string ip, ushort port, List<MapInfo> maps) { using (var packet = new InterPacket(InterHeader.Zoneopened)) { packet.WriteByte(zoneid); packet.WriteStringLen(ip); packet.WriteUShort(port); packet.WriteInt(maps.Count); foreach (var m in maps) { packet.WriteUShort(m.ID); packet.WriteStringLen(m.ShortName); packet.WriteStringLen(m.FullName); packet.WriteInt(m.RegenX); packet.WriteInt(m.RegenY); packet.WriteByte(m.Kingdom); packet.WriteUShort(m.ViewRange); } foreach (var c in Program.Zones.Values) { if (c.ID != zoneid) c.SendPacket(packet); } } }
private static void On_CharacterManager_CharacterLevelUp(WorldCharacter Character) { //fix later if (Character.IsInGuildAcademy) { using (var packet = new Packet(SH38Type.AcademyMemberLevelUp)) { packet.WriteString(Character.Character.Name, 16); packet.WriteByte(Character.Character.CharLevel); Character.Guild.Broadcast(packet); Character.GuildAcademy.Broadcast(packet); } lock (Character.Guild.ThreadLocker) { uint points; if (GuildDataProvider.Instance.AcademyLevelUpPoints.TryGetValue(Character.Character.CharLevel, out points)) { Character.GuildAcademy.Points += (ushort)points; } //add time to guild buff var time = Program.CurrentTime; //var newTime = Math.Min(CharacterDataProvider.ChrCommon.GuildBuffMaxTime.TotalSeconds, (CharacterDataProvider.ChrCommon.GuildBuffAddTime.TotalSeconds + Character.GuildAcademy.GuildBuffKeepTime.TotalSeconds)); //Character.GuildAcademy.GuildBuffKeepTime = TimeSpan.FromSeconds(newTime); //update guild buff to all guild/aka members var toUpdate = new List<WorldCharacter>(); foreach (var member in Character.GuildAcademy.Members) { if (member.Character.IsOnline) { toUpdate.Add(member.Character); } } foreach (var member in Character.Guild.Members) { if (member.Character.IsOnline && !toUpdate.Contains(member.Character)) { toUpdate.Add(member.Character); } } //BuffManager.SetBuff(GuildDataProvider.AcademyBuff, GuildDataProvider.AcademyBuffStrength, (uint)(newTime * 1000), toUpdate.ToArray()); toUpdate.Clear(); toUpdate = null; //update guild buff to zones using (var packet = new InterPacket(InterHeader.ZONE_AcademyBuffUpdate)) { packet.WriteInt(Character.Guild.ID); packet.WriteDateTime(time); packet.WriteDouble(900);//fix later ZoneManager.Instance.Broadcast(packet); } //broadcast info and save guild Character.GuildAcademy.BroadcastInfo(); Character.GuildAcademy.Save(); } } }
public void ChangeMoney(long NewMoney) { this.Character.Money = NewMoney; using (InterPacket packet = new InterPacket(InterHeader.UpdateMoneyFromWorld)) { packet.WriteInt(this.Character.ID); packet.WriteLong(NewMoney); } }
public static void SendChangeMap(WorldCharacter pChar,int OldMap) { Managers.CharacterManager.InvokeChangeMapEvent(pChar); ZoneConnection conn = Program.GetZoneByMap(OldMap); using (var packet = new InterPacket(InterHeader.GetBroadcastList)) { packet.WriteString(pChar.Character.Name, 16); packet.WriteInt(pChar.Character.PositionInfo.XPos); packet.WriteInt(pChar.Character.PositionInfo.YPos); conn.SendPacket(packet); } }
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.ZONE_GuildMemberAdd)) { packet.WriteInt(ID); packet.WriteInt(Character.ID); packet.WriteByte((byte)newMember.Rank); packet.WriteUShort(newMember.Corp); Managers.ZoneManager.Instance.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(); } } }
public static void TransferClient(byte zoneID,ushort mapid, int accountID, string userName,int CharID, string charName, ushort randid, byte admin, string hostIP) { using (var packet = new InterPacket(InterHeader.Clienttransferzone)) { packet.WriteByte(zoneID); packet.WriteInt(accountID); packet.WriteUShort(mapid); packet.WriteStringLen(userName); packet.WriteStringLen(charName); packet.WriteInt(CharID); packet.WriteUShort(randid); packet.WriteByte(admin); packet.WriteStringLen(hostIP); WorldConnector.Instance.SendPacket(packet); } }
public static void SendChangeZoneToWorld(ZoneCharacter character, ushort mapid, int x, int y, string ip, ushort port, ushort randomid) { using (var packet = new InterPacket(InterHeader.ChangeZone)) { packet.WriteUShort(mapid); packet.WriteInt(x); packet.WriteInt(y); packet.WriteString(character.Name,16); packet.WriteString(Settings.Instance.IP, 16); packet.WriteUShort(port); packet.WriteUShort(randomid); WorldConnector.Instance.SendPacket(packet); } }
private static void On_CharacterManager_CharacterLogin(WorldCharacter Character) { if (Character.IsInGuild) { var guild = Character.Guild; //send guild info to client using (var packet = new Packet(SH4Type.CharacterGuildinfo)) { guild.WriteGuildInfo(packet); Character.Client.SendPacket(packet); } //send member list to client guild.SendMemberList(Character.Client); GuildMember member; if (guild.GetMember(Character.Character.Name, out member)) { //send guild member logged in to other guild members using (var packet = new Packet(SH29Type.GuildMemberLoggedIn)) { packet.WriteString(Character.Character.Name, 16); Character.Guild.Broadcast(packet, member); } } //send packet to zone that guild member logged in using (var packet = new InterPacket(InterHeader.ZONE_GuildMemberLogin)) { packet.WriteInt(guild.ID); packet.WriteInt(Character.ID); ZoneManager.Instance.Broadcast(packet); } } else { using (var packet = new Packet(SH4Type.CharacterGuildinfo)) { packet.WriteInt(0); Character.Client.SendPacket(packet); } } //academy var academy = Character.GuildAcademy; if (academy != null) { if (Character.IsInGuildAcademy) { using (var packet = new Packet(SH4Type.CharacterGuildacademyinfo)) { academy.WriteInfo(packet); Character.Client.SendPacket(packet); } academy.SendMemberList(Character.Client); } else { using (var packet = new Packet(SH4Type.CharacterGuildacademyinfo)) { packet.Fill(5, 0); Character.Client.SendPacket(packet); } } } else { using (var packet = new Packet(SH4Type.CharacterGuildacademyinfo)) { packet.Fill(5, 0); Character.Client.SendPacket(packet); } } }
private static void On_CharacterManager_CharacterLogout(WorldCharacter Character) { if (Character.IsInGuildAcademy) { using (var packet = new Packet(SH38Type.AcademyMemberLoggedOut)) { packet.WriteString(Character.Character.Name, 16); Character.Guild.Broadcast(packet); Character.GuildAcademy.Broadcast(packet); } using (var packet = new InterPacket(InterHeader.ZONE_AcademyMemberOffline)) { packet.WriteInt(Character.Guild.ID); packet.WriteInt(Character.ID); ZoneManager.Instance.Broadcast(packet); } } }
private static void On_CharacterManager_CharacterLogout(WorldCharacter Character) { GuildMember member; if (Character.Guild != null && Character.Guild.GetMember(Character.Character.Name, out member)) { //send guild member logged out to other guild members using (var packet = new Packet(SH29Type.GuildMemberLoggedOut)) { packet.WriteString(Character.Character.Name, 16); Character.Guild.Broadcast(packet, member); } //send packet to zone that guild member logged out using (var packet = new InterPacket(InterHeader.ZONE_GuildMemberLogout)) { packet.WriteInt(Character.Guild.ID); packet.WriteInt(Character.ID); ZoneManager.Instance.Broadcast(packet); } } }
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.ZONE_GuildMemberRemove)) { packet.WriteInt(ID); packet.WriteInt(Member.Character.ID); ZoneManager.Instance.Broadcast(packet); } } //clean up Member.Dispose(); if (conCreated) { con.Dispose(); } } }