/// <summary> /// Adds a friend and updates the database. /// </summary> /// <param name="friendName">The name of the friend that is being added.</param> public void HandleActionAddFriend(string friendName) { if (string.Equals(friendName, Name, StringComparison.CurrentCultureIgnoreCase)) { ChatPacket.SendServerMessage(Session, "Sorry, but you can't be friends with yourself.", ChatMessageType.Broadcast); } // get friend player info var friendInfo = WorldManager.AllPlayers.FirstOrDefault(p => p.Name.Equals(friendName)); if (friendInfo == null) { ChatPacket.SendServerMessage(Session, "That character does not exist", ChatMessageType.Broadcast); return; } // already exists in friends list? if (Biota.CharacterPropertiesFriendList.FirstOrDefault(f => f.FriendId == friendInfo.Guid.Full) != null) { ChatPacket.SendServerMessage(Session, "That character is already in your friends list", ChatMessageType.Broadcast); } var newFriend = new CharacterPropertiesFriendList(); newFriend.ObjectId = Biota.Id; // current player id //newFriend.AccountId = Biota.Character.AccountId; // current player account id newFriend.FriendId = friendInfo.Biota.Id; // add friend to DB Biota.CharacterPropertiesFriendList.Add(newFriend); // send network message Session.Network.EnqueueSend(new GameEventFriendsListUpdate(Session, GameEventFriendsListUpdate.FriendsUpdateTypeFlag.FriendAdded, newFriend)); }
/// <summary> /// This constructor is used for passing in a single friend for and add, remove, or update status. It also allows you to override the online status so the WorldManager isn't checked. /// </summary> /// <param name="session"></param> /// <param name="updateType"></param> /// <param name="friend"></param> /// <param name="overrideOnlineStatus">Set to true if you want to force a value for the online status of the friend. Useful if you know the status and don't want to have the WorldManager check</param> /// <param name="onlineStatusVal">If overrideOnlineStatus is true, then this is the online status value that you want to force in the packet</param> public GameEventFriendsListUpdate(Session session, FriendsUpdateTypeFlag updateType, CharacterPropertiesFriendList friend, bool overrideOnlineStatus = false, bool onlineStatusVal = false) : base(GameEventType.FriendsListUpdate, GameMessageGroup.UIQueue, session) { this.updateType = updateType; this.friend = friend; this.overrideOnlineStatus = overrideOnlineStatus; this.onlineStatusVal = onlineStatusVal; WriteEventBody(); }
/// <summary> /// Will send out GameEventFriendsListUpdate packets to everyone online that has this player as a friend. /// </summary> public void SendFriendStatusUpdates(bool onlineStatus) { var inverseFriends = PlayerManager.GetOnlineInverseFriends(Guid); foreach (var friend in inverseFriends) { var playerFriend = new CharacterPropertiesFriendList { CharacterId = friend.Guid.Full, FriendId = Guid.Full }; friend.Session.Network.EnqueueSend(new GameEventFriendsListUpdate(friend.Session, GameEventFriendsListUpdate.FriendsUpdateTypeFlag.FriendStatusChanged, playerFriend, true, onlineStatus)); } }