Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
        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;
                        }
                    }
                }
            }
        }
Ejemplo n.º 5
0
        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);
            }
        }
Ejemplo n.º 6
0
        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;
                        }
                    }
                }
            }
        }
Ejemplo n.º 7
0
        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);
            }
        }
Ejemplo n.º 8
0
        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();
            }
        }
Ejemplo n.º 9
0
        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;
                        }
                    }
                }
            }
        }
Ejemplo n.º 10
0
        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();
            }
        }
Ejemplo n.º 11
0
        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;
                        }
                    }
                }
            }
        }