public static void InteractGuild(PlayerSocket socket, Packet packet)
        {
            byte    interaction = packet.ReadByte();
            int     guildID;
            IGuild  guild;
            IMobile player = socket.Mobile;

            switch (interaction)
            {
            case 0:    //ShowGuildList
                player.ShowGuildList();
                break;

            case 1:    //View Guild
                guildID = packet.ReadInt16();
                guild   = World.GetGuildByID(guildID);
                player.ShowGuild(guild);
                break;

            case 2:    //Apply to Guild
                guildID = packet.ReadInt16();
                guild   = World.GetGuildByID(guildID);
                player.ApplyGuild(guild);
                break;

            case 4:    //Guild Applicants
                guildID = packet.ReadInt16();
                guild   = World.GetGuildByID(guildID);

                interaction = packet.ReadByte();
                byte applicantID;
                switch (interaction)
                {
                case 0:        //Accept Applicant
                    applicantID = packet.ReadByte();
                    guild.AcceptApplicant(player, applicantID);
                    break;

                case 1:
                    applicantID = packet.ReadByte();
                    guild.DenyApplicant(player, applicantID);
                    break;

                case 2:        //show guild applicants
                    guild.ShowGuildApplicants(player, guild);
                    break;
                }
                //state.Send(new ShowGuildApplicants(guild));
                break;

            case 5:    //Guild Member Ranking/Kick
                guildID = packet.ReadInt16();
                guild   = World.GetGuildByID(guildID);

                interaction = packet.ReadByte();
                byte memberID;
                switch (interaction)
                {
                case 0:                               //Update member
                    memberID = packet.ReadByte();
                    byte founder = packet.ReadByte(); //Founder/Lord
                    byte memType = packet.ReadByte();
                    guild.UpdateMember(player, memberID, founder, (MemberType)memType);
                    break;

                case 1:
                    memberID = packet.ReadByte();
                    guild.KickMember(player, memberID);
                    break;
                }
                player.ShowGuild(guild);    //refresh the guild screen

                break;

            case 6:    //Guild Decrees
                guildID = packet.ReadInt16();
                guild   = World.GetGuildByID(guildID);

                interaction = packet.ReadByte();
                byte decreeType;
                switch (interaction)
                {
                case 0:        //Add Decree
                    decreeType = packet.ReadByte();
                    guildID    = packet.ReadInt16();
                    guild.AddDecree(player, decreeType, guildID);
                    player.ShowGuild(guild);        //refresh the guild screen
                    break;

                case 1:
                    byte decreeID = packet.ReadByte();
                    guild.RemoveDecree(player, decreeID);
                    player.ShowGuild(guild);        //refresh the guild screen
                    break;

                case 2:        //show guild decrees
                    player.ShowGuildDecrees(guild);
                    break;
                }
                break;

            case 8:    //Found Guild
                string guildName = packet.ReadNullString();
                player.CreateGuild(guildName);
                break;

            case 9:    //Guild Hall
                guildID = packet.ReadInt16();
                guild   = World.GetGuildByID(guildID);

                interaction = packet.ReadByte();
                switch (interaction)
                {
                case 0:        //Purchase Guild Hall
                    World.ShowAvailableGuildHalls(player);
                    break;

                case 1:
                    byte guildHallID = packet.ReadByte();
                    player.BuyGuildHall(guild, guildHallID);
                    break;

                case 2:        //Remove Guild Hall
                    player.SellGuildHall(guild);
                    break;
                }
                break;

            default:
                Console.WriteLine(String.Format("Unknown guild Interaction"));
                break;
            }
        }