From 20d58f41e5633adbd81cfedb9211456773bc0792 Mon Sep 17 00:00:00 2001 From: John Cote Date: Sun, 25 Jul 2021 22:03:52 -0400 Subject: [PATCH] friends: Handle coming online --- otp/login/AstronLoginManagerUD.py | 5 +++ toontown/friends/ToontownFriendsManagerUD.py | 32 ++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/otp/login/AstronLoginManagerUD.py b/otp/login/AstronLoginManagerUD.py index af41023..bdc6c93 100644 --- a/otp/login/AstronLoginManagerUD.py +++ b/otp/login/AstronLoginManagerUD.py @@ -783,6 +783,9 @@ class LoadAvatarOperation(AvatarOperation): self.loginManager.air.setOwner(self.avId, channel) + friendsList = [friendId for friendId, _ in self.avatar['setFriendsList'][0]] + self.loginManager.air.toontownFriendsManager.comingOnline(self.avId, friendsList) + self._handleDone() @@ -799,6 +802,8 @@ class UnloadAvatarOperation(GameOperation): def __handleUnloadAvatar(self): channel = self.loginManager.GetAccountConnectionChannel(self.sender) + self.loginManager.air.toontownFriendsManager.goingOffline(self.avId) + datagram = PyDatagram() datagram.addServerHeader(channel, self.loginManager.air.ourChannel, CLIENTAGENT_CLEAR_POST_REMOVES) self.loginManager.air.send(datagram) diff --git a/toontown/friends/ToontownFriendsManagerUD.py b/toontown/friends/ToontownFriendsManagerUD.py index c61be73..5d61a3e 100644 --- a/toontown/friends/ToontownFriendsManagerUD.py +++ b/toontown/friends/ToontownFriendsManagerUD.py @@ -346,6 +346,35 @@ class RemoveFriendOperation(FriendsOperation): FriendsOperation._handleDone(self) +class ComingOnlineOperation(FriendsOperation): + + def __init__(self, friendsManager): + FriendsOperation.__init__(self, friendsManager, None) + self.avId = None + self.friendsList = None + self.currentFriendIdx = None + + def start(self, avId, friendsList): + self.avId = avId + self.friendsList = friendsList + self.__checkFriendsOnline() + + def __checkFriendsOnline(self): + self.currentFriendIdx = 0 + for friendId in self.friendsList: + self.friendsManager.air.getActivated(friendId, self.__gotFriendActivated) + + def __gotFriendActivated(self, avId, activated): + self.currentFriendIdx += 1 + if activated: + self.friendsManager.declareObject(avId, self.avId) + self.friendsManager.declareObject(self.avId, avId) + self.friendsManager.sendFriendOnline(avId, self.avId, 0, 1) + + if self.currentFriendIdx >= len(self.friendsList): + self._handleDone() + + class ToontownFriendsManagerUD(DistributedObjectGlobalUD): notify = DirectNotifyGlobal.directNotify.newCategory('ToontownFriendsManagerUD') @@ -414,3 +443,6 @@ class ToontownFriendsManagerUD(DistributedObjectGlobalUD): def removeFriend(self, friendId): self.runSenderOperation(RemoveFriendOperation, friendId) + + def comingOnline(self, avId, friendsList): + self.runServerOperation(ComingOnlineOperation, avId, friendsList)