public static void On_GameClient_JoinAcademy(WorldClient client, Packet packet) { string guildName; if (!packet.TryReadString(out guildName, 16)) { return; } Guild guild; if (!GuildManager.GetGuildByName(guildName, out guild)) { Handler38.SendAcademyResponse(client, guildName, GuildAcademyResponse.AcademyNotFound); return; } guild.Academy.AddMember(client.Character, GuildAcademyRank.Member); }
public void AddMember(WorldCharacter Character, GuildAcademyRank Rank) { if (Character.Character.CharLevel < 10 || Character.Character.CharLevel > 60) { return; } if (Character.IsInGuild || Character.IsInGuildAcademy) { Handler38.SendAcademyResponse(Character.Client, Guild.Name, GuildAcademyResponse.AlreadyInAcademy); return; } lock (Guild.ThreadLocker) { if (Members.Count >= MaxMembers) { 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 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.ZoneAcademyMemberJoined)) { packet.WriteInt(Guild.ID); packet.WriteInt(Character.ID); packet.WriteDateTime(registerDate); ZoneManager.Broadcast(packet); } break; case -1: Handler38.SendAcademyResponse(Character.Client, Guild.Name, GuildAcademyResponse.AlreadyInAcademy); return; case -2: default: Handler38.SendAcademyResponse(Character.Client, Guild.Name, GuildAcademyResponse.DatabaseError); return; } } } } }