// Called first time when starting a new session public void InitPlayer(Player player) { Debug.Assert(FieldPlayer == null, "Not allowed to reinitialize player."); FieldManager = FieldManagerFactory.GetManager(player); FieldPlayer = FieldManager.RequestFieldObject(player); GameServer.Storage.AddPlayer(player); GameServer.BuddyManager.SetFriendSessions(player); Party party = GameServer.PartyManager.GetPartyByMember(player.CharacterId); if (party != null) { party.BroadcastPacketParty(PartyPacket.LoginNotice(player), this); } player.BuddyList.ForEach(buddy => { if (buddy.Friend?.Session?.Connected() ?? false) { Buddy myBuddy = GameServer.BuddyManager.GetBuddyByPlayerAndId(buddy.Friend, buddy.SharedId); buddy.Friend.Session.Send(BuddyPacket.LoginLogoutNotification(myBuddy)); buddy.Friend.Session.Send(BuddyPacket.UpdateBuddy(myBuddy)); } }); }
public override void EndSession() { Player.Session = null; GameServer.BuddyManager.SetFriendSessions(Player); FieldManager.RemovePlayer(this, FieldPlayer); GameServer.Storage.RemovePlayer(FieldPlayer.Value); // Should we Join the thread to wait for it to complete? if (Player.Party != null) { Player.Party.CheckOffineParty(Player); } Player.BuddyList.ForEach(buddy => { if (buddy.Friend?.Session?.Connected() ?? false) { Buddy myBuddy = GameServer.BuddyManager.GetBuddyByPlayerAndId(buddy.Friend, buddy.SharedId); buddy.Friend.Session.Send(BuddyPacket.LoginLogoutNotification(myBuddy)); buddy.Friend.Session.Send(BuddyPacket.UpdateBuddy(myBuddy)); } }); }
private static void HandleAccept(GameSession session, PacketReader packet) { long buddyId = packet.ReadLong(); Buddy buddy = GameServer.BuddyManager.GetBuddyByPlayerAndId(session.Player, buddyId); Buddy buddyFriend = GameServer.BuddyManager.GetBuddyByPlayerAndId(buddy.Friend, buddyId); buddy.IsFriendRequest = false; buddyFriend.IsPending = false; session.Send(BuddyPacket.AcceptRequest(buddy)); session.Send(BuddyPacket.UpdateBuddy(buddy)); session.Send(BuddyPacket.LoginLogoutNotification(buddy)); DatabaseManager.Buddies.Update(buddy); DatabaseManager.Buddies.Update(buddyFriend); Player otherPlayer = GameServer.PlayerManager.GetPlayerByName(buddy.Friend.Name); if (otherPlayer != null) { otherPlayer.Session.Send(BuddyPacket.UpdateBuddy(buddyFriend)); otherPlayer.Session.Send(BuddyPacket.AcceptNotification(buddyFriend)); } }