public static void ChangeFromGuildAcademyToResponse(WorldClient client, Packet packet) { string GuildName; string RequestName; bool answer; if (!packet.TryReadString(out GuildName, 16) || !packet.TryReadString(out RequestName, 16) || (!packet.TryReadBool(out answer) || !client.Character.IsInGuildAcademy)) { return; } if (answer) { GuildAcademyMember pMember = client.Character.GuildAcademy.Members.Find(m => m.Character.Character.Name == RequestName); if (pMember == null) { return; } pMember.Character.IsInGuildAcademy = false; pMember.Academy.RemoveMember(pMember); pMember.Character.GuildAcademy.Guild.AddMember(pMember.Character, GuildRank.Member, Program.DatabaseManager.GetClient().GetConnection(), true, true); pMember.Character.Guild = pMember.Character.GuildAcademy.Guild; pMember.Character.IsInGuild = true; using (var pack = new Packet(SH38Type.SendJoinGuildFromAcademy)) { //this packet remove character from academy List and added to GuildList pack.WriteString(RequestName, 16); pack.WriteString(client.Character.Character.Name, 16); pack.WriteByte(6); //rank pack.WriteInt(0); //unk pack.WriteUShort(0); //korp pack.Fill(64, 0x00); //unk pack.WriteByte(true ? (byte)0x95 : (byte)0x00); // (this.isOnline ? (byte)0x95 : (byte)0x00); pack.Fill(3, 0x00); //unk pack.WriteByte(pMember.Character.Character.Job); pack.WriteByte(pMember.Character.Character.CharLevel); pack.Fill(13, 0x00);//unk client.Character.GuildAcademy.Guild.Broadcast(pack); client.Character.GuildAcademy.Broadcast(pack); } } using (var p2 = new Packet(SH4Type.CharacterGuildinfo)) { client.Character.Guild.WriteGuildInfo(packet); client.SendPacket(p2); } using (var pack = new Packet(SH29Type.GuildMemberJoined)) { pack.WriteString(client.Character.Character.Name, 16); client.Character.GuildAcademy.Guild.Broadcast(pack); client.Character.GuildAcademy.Broadcast(pack); } using (var pack = new Packet(SH29Type.ChangeResponse)) { pack.WriteUShort(3137); //unk pack.WriteByte(3); pack.Fill(2, 0x00); //unk client.SendPacket(pack); } }
public static void GuildAcademyChatBlock(WorldClient client, Packet packet) { if (!client.Character.IsInGuildAcademy) { return; } string Blockname; if (!packet.TryReadString(out Blockname, 16)) { return; } GuildAcademyMember pMember = client.Character.GuildAcademy.Members.Find(m => m.Character.Character.Name == Blockname); if (pMember == null) { return; } pMember.IsChatBlocked = true; pMember.Save(Program.DatabaseManager.GetClient().GetConnection()); using (var pack = new Packet(SH38Type.AcademyChatBlockResponse)) { pack.WriteString(client.Character.Character.Name, 16); pack.WriteString(Blockname, 16); client.Character.GuildAcademy.Guild.Broadcast(pack); client.Character.Guild.Broadcast(pack); } }
private void Load() { DataTable AcademyData = null; DataTable MemberData = null; using (DatabaseClient DBClient = Program.DatabaseManager.GetClient()) { AcademyData = DBClient.ReadDataTable("SELECT * FROM GuildAcademy WHERE GuildID = " + Guild.ID + ""); MemberData = DBClient.ReadDataTable("SELECT * FROM GuildAcademyMembers WHERE GuildID = " + Guild.ID + ""); } foreach (DataRow row in AcademyData.Rows) { //load academy info Message = row["Message"].ToString(); Points = GetDataTypes.GetUshort(row["Points"]); } //members foreach (DataRow MemberRow in MemberData.Rows) { WorldCharacter character; if (!CharacterManager.Instance.GetCharacterByID(Convert.ToInt32(MemberRow["CharID"]), out character)) { continue; // maybe deleted } var member = new GuildAcademyMember(this, character, MemberRow); Members.Add(member); } }
public void Broadcast(Packet Packet, GuildAcademyMember Exclude = null) { lock (Guild.ThreadLocker) { foreach (var member in Members) { if (Exclude != null && member == Exclude) { continue; } if (member.Character.IsOnline) { try { member.Character.Client.SendPacket(Packet); } catch (Exception) { continue; } } } } }
public static void JumpToMember(WorldClient client, Packet packet) { string pMemberName; if (!packet.TryReadString(out pMemberName, 16)) { return; } if (!client.Character.IsInGuildAcademy) { return; } GuildAcademyMember pMember = client.Character.GuildAcademy.Members.Find(m => m.Character.Character.Name == pMemberName); if (pMember != null) { int oldmap = client.Character.Character.PositionInfo.Map; client.Character.Character.PositionInfo.Map = pMember.Character.Character.PositionInfo.Map; client.Character.Character.PositionInfo.XPos = pMember.Character.Character.PositionInfo.XPos; client.Character.Character.PositionInfo.YPos = pMember.Character.Character.PositionInfo.YPos; client.Character.ChangeMap(oldmap); } }
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; } } } } }
private void Load() { DataTable AcademyData = null; DataTable MemberData = null; using(DatabaseClient DBClient = Program.DatabaseManager.GetClient()) { AcademyData = DBClient.ReadDataTable("SELECT * FROM GuildAcademy WHERE GuildID = "+Guild.ID+""); MemberData = DBClient.ReadDataTable("SELECT * FROM GuildAcademyMembers WHERE GuildID = "+Guild.ID+""); } foreach (DataRow row in AcademyData.Rows) { //load academy info Message = row["Message"].ToString(); Points = GetDataTypes.GetUshort(row["Points"]); } //members foreach(DataRow MemberRow in MemberData.Rows) { WorldCharacter character; if (!CharacterManager.Instance.GetCharacterByID(Convert.ToInt32(MemberRow["CharID"]), out character)) continue; // maybe deleted var member = new GuildAcademyMember(this, character,MemberRow); Members.Add(member); } }
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 void Broadcast(Packet Packet, GuildAcademyMember Exclude = null) { lock (Guild.ThreadLocker) { foreach (var member in Members) { if (Exclude != null && member == Exclude) continue; if (member.Character.IsOnline) { try { member.Character.Client.SendPacket(Packet); } catch (Exception) { continue; } } } } }
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; } } } } }