From b259ead8c873a07321b14f438841ceb6d5766424 Mon Sep 17 00:00:00 2001 From: John Cote Date: Fri, 16 Jul 2021 22:26:32 -0400 Subject: [PATCH] friends: Handle online friends --- etc/toon.dc | 1 + .../distributed/ToontownClientRepository.py | 37 ++++++++++++------- toontown/friends/ToontownFriendsManager.py | 3 ++ toontown/friends/ToontownFriendsManagerUD.py | 2 + 4 files changed, 29 insertions(+), 14 deletions(-) diff --git a/etc/toon.dc b/etc/toon.dc index ac7fc2d..a075b28 100755 --- a/etc/toon.dc +++ b/etc/toon.dc @@ -2856,6 +2856,7 @@ struct Friend { dclass ToontownFriendsManager : DistributedObject { getFriendsListRequest() clsend; getFriendsListResponse(Friend[]); + friendOnline(uint32, uint8, uint8); }; dclass TTSpeedchatRelay : SpeedchatRelay { diff --git a/toontown/distributed/ToontownClientRepository.py b/toontown/distributed/ToontownClientRepository.py index e7eb206..c9efad0 100644 --- a/toontown/distributed/ToontownClientRepository.py +++ b/toontown/distributed/ToontownClientRepository.py @@ -995,20 +995,29 @@ class ToontownClientRepository(OTPClientRepository.OTPClientRepository): if avatarHandleList: messenger.send('gotExtraFriendHandles', [avatarHandleList]) - def handleFriendOnline(self, di): - doId = di.getUint32() - commonChatFlags = 0 - whitelistChatFlags = 0 - if di.getRemainingSize() > 0: - commonChatFlags = di.getUint8() - if di.getRemainingSize() > 0: - whitelistChatFlags = di.getUint8() - self.notify.debug('Friend %d now online. common=%d whitelist=%d' % (doId, commonChatFlags, whitelistChatFlags)) - if doId not in self.friendsOnline: - self.friendsOnline[doId] = self.identifyFriend(doId) - messenger.send('friendOnline', [doId, commonChatFlags, whitelistChatFlags]) - if not self.friendsOnline[doId]: - self.friendPendingChatSettings[doId] = (commonChatFlags, whitelistChatFlags) + if __astron__: + def handleFriendOnline(self, doId, commonChatFlags, whitelistChatFlags): + self.notify.debug('Friend %d now online. common=%d whitelist=%d' % (doId, commonChatFlags, whitelistChatFlags)) + if doId not in self.friendsOnline: + self.friendsOnline[doId] = self.identifyFriend(doId) + messenger.send('friendOnline', [doId, commonChatFlags, whitelistChatFlags]) + if not self.friendsOnline[doId]: + self.friendPendingChatSettings[doId] = (commonChatFlags, whitelistChatFlags) + else: + def handleFriendOnline(self, di): + doId = di.getUint32() + commonChatFlags = 0 + whitelistChatFlags = 0 + if di.getRemainingSize() > 0: + commonChatFlags = di.getUint8() + if di.getRemainingSize() > 0: + whitelistChatFlags = di.getUint8() + self.notify.debug('Friend %d now online. common=%d whitelist=%d' % (doId, commonChatFlags, whitelistChatFlags)) + if doId not in self.friendsOnline: + self.friendsOnline[doId] = self.identifyFriend(doId) + messenger.send('friendOnline', [doId, commonChatFlags, whitelistChatFlags]) + if not self.friendsOnline[doId]: + self.friendPendingChatSettings[doId] = (commonChatFlags, whitelistChatFlags) def handleFriendOffline(self, di): doId = di.getUint32() diff --git a/toontown/friends/ToontownFriendsManager.py b/toontown/friends/ToontownFriendsManager.py index 10debb5..2440a2c 100644 --- a/toontown/friends/ToontownFriendsManager.py +++ b/toontown/friends/ToontownFriendsManager.py @@ -10,3 +10,6 @@ class ToontownFriendsManager(DistributedObjectGlobal): def getFriendsListResponse(self, friendsList): self.cr.handleGetFriendsList(friendsList) + + def friendOnline(self, doId, commonChatFlags, whitelistChatFlags): + self.cr.handleFriendOnline(doId, commonChatFlags, whitelistChatFlags) diff --git a/toontown/friends/ToontownFriendsManagerUD.py b/toontown/friends/ToontownFriendsManagerUD.py index 0468af5..adfcb76 100644 --- a/toontown/friends/ToontownFriendsManagerUD.py +++ b/toontown/friends/ToontownFriendsManagerUD.py @@ -80,6 +80,8 @@ class GetFriendsListOperation(FriendsOperation): def __sendFriendsList(self): self.friendsManager.sendUpdateToAvatarId(self.sender, 'getFriendsListResponse', [self.friendsList]) + for friendId in self.onlineFriends: + self.friendsManager.sendUpdateToAvatarId(self.sender, 'friendOnline', [friendId, 0, 1]) class ToontownFriendsManagerUD(DistributedObjectGlobalUD):