public List<Friend> GetFriendsByCharacterId(int characterId)
        {
            DbParameter characterIdParameter = _db.CreateParameter(DbNames.GETFRIENDSBYCHARACTERID_CHARACTERID_PARAMETER, characterId);
            characterIdParameter.DbType = DbType.Int32;

            _db.Open();

            DbDataReader reader = _db.ExcecuteReader(DbNames.GETFRIENDSBYCHARACTERID_STOREDPROC, CommandType.StoredProcedure, characterIdParameter);

            int ordinalFriend_relationtype = reader.GetOrdinal(DbNames.FRIEND_RELATIONTYPE);
            int ordinalFriend_targetid = reader.GetOrdinal(DbNames.FRIEND_TARGETID);
            int ordinalFriend_targetname = reader.GetOrdinal(DbNames.FRIEND_TARGETNAME);

            List<Friend> friends = new List<Friend>();

            while (reader.Read())
            {
                Friend friend = new Friend
                {
                    RelationType = (FriendAddTypes)reader.GetByte(ordinalFriend_relationtype),
                    FriendID = reader.GetInt32(ordinalFriend_targetid),
                    FriendName = reader.GetString(ordinalFriend_targetname),
                    FriendOnline = false // check later somehow with clients in channel server :/
                };

                friends.Add(friend);
            }

            reader.Close();
            _db.Close();

            return friends;
        }
        void c_ClientAddFriendInfo(object sender, ClientAddFriendEventArgs e)
        {
            Client c = (Client)sender;
            FriendAddInfo i = e.Info;
            Client p = null;

            if (c.MyCharacter.CharacterId != i.TargetID)
                p = GetClientByCharacterID(i.TargetID);
            else
                p = GetClientByCharacterID(i.AskerID);

            if (i.Type == FriendAddTypes.TeacherStudent)
                if (c.MyCharacter.Class != p.MyCharacter.Class)
                {
                    i.Answer = FriendAddAnswers.CannotTeacherStudentDifClass;
                    c.Send(PacketManager.SendAddFriend(i));
                    return;
                }

            if (i.Answer == FriendAddAnswers.Request)
                p.Send(PacketManager.SendAddFriend(i));

            if (i.Answer == FriendAddAnswers.Cancel)
                p.Send(PacketManager.SendAddFriend(i)); // only send to asker stuff like has refused to add you as lover/friend/studen..

            if (i.Answer == FriendAddAnswers.Accept)
            {
                i.Answer = FriendAddAnswers.Accepted;
                p.Send(PacketManager.SendAddFriend(i));

                if (characterManager.AddRelation(c.MyCharacter.CharacterId, i.Type, p.MyCharacter.CharacterId, p.MyCharacter.Name) && characterManager.AddRelation(p.MyCharacter.CharacterId, i.Type, c.MyCharacter.CharacterId, c.MyCharacter.Name))
                {
                    Friend c_add = new Friend()
                    {
                        FriendID = p.MyCharacter.CharacterId,
                        FriendName = p.MyCharacter.Name,
                        FriendOnline = p.MyCharacter.Online,
                        RelationType = i.Type
                    };

                    Friend p_add = new Friend()
                    {
                        FriendID = c.MyCharacter.CharacterId,
                        FriendName = c.MyCharacter.Name,
                        FriendOnline = c.MyCharacter.Online,
                        RelationType = i.Type
                    };

                    c.MyCharacter.FriendList.Add(c_add);
                    p.MyCharacter.FriendList.Add(p_add);
                    c.Send(PacketManager.SendAddFriendStatus(i.Type, p.MyCharacter));
                    p.Send(PacketManager.SendAddFriendStatus(i.Type, c.MyCharacter));
                }
                else
                {
                    // send error etc
                }
            }
        }
        private void UpdateFriendsStatus(Client c)
        {
            Friend me = new Friend
            {
                FriendID = c.MyCharacter.CharacterId,
                FriendName = c.MyCharacter.Name,
                FriendOnline = c.MyCharacter.Online
            };

            Client friend;
            byte[] SendFriendOnline = null;
            foreach (Friend f in c.MyCharacter.FriendList)
            {
                friend = GetClientByCharacterID(f.FriendID);
                if (friend != null)
                {
                    f.FriendOnline = true; // could add friend connected here or something
                    SendFriendOnline = PacketManager.SendFriendOnlineStatus(me);
                    friend.Send(SendFriendOnline);
                }
                else
                    f.FriendOnline = false;
            }
        }
 public static byte[] SendFriendOnlineStatus(Friend friend)
 {
     Packet p = new Packet(20);
     p.WriteInt(friend.FriendID);
     p.WriteHexString("02 04 00 00 00");
     p.WriteByte(Convert.ToByte(friend.FriendOnline));
     return p.GetWrittenBuffer(PacketIds.SendFriendOnlinestatus);
 }