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); }