friends: Handle avatar details retrieval
This commit is contained in:
parent
b259ead8c8
commit
46ac296025
|
|
@ -2857,6 +2857,8 @@ dclass ToontownFriendsManager : DistributedObject {
|
||||||
getFriendsListRequest() clsend;
|
getFriendsListRequest() clsend;
|
||||||
getFriendsListResponse(Friend[]);
|
getFriendsListResponse(Friend[]);
|
||||||
friendOnline(uint32, uint8, uint8);
|
friendOnline(uint32, uint8, uint8);
|
||||||
|
getAvatarDetailsRequest(uint32) clsend;
|
||||||
|
getAvatarDetailsResponse(blob);
|
||||||
};
|
};
|
||||||
|
|
||||||
dclass TTSpeedchatRelay : SpeedchatRelay {
|
dclass TTSpeedchatRelay : SpeedchatRelay {
|
||||||
|
|
|
||||||
|
|
@ -438,11 +438,14 @@ class ToontownClientRepository(OTPClientRepository.OTPClientRepository):
|
||||||
pad.delayDelete.destroy()
|
pad.delayDelete.destroy()
|
||||||
|
|
||||||
def __sendGetAvatarDetails(self, avId):
|
def __sendGetAvatarDetails(self, avId):
|
||||||
datagram = PyDatagram()
|
if __astron__:
|
||||||
avatar = self.__queryAvatarMap[avId].avatar
|
self.toontownFriendsManager.sendGetAvatarDetailsRequest(avId)
|
||||||
datagram.addUint16(avatar.getRequestID())
|
else:
|
||||||
datagram.addUint32(avId)
|
datagram = PyDatagram()
|
||||||
self.send(datagram)
|
avatar = self.__queryAvatarMap[avId].avatar
|
||||||
|
datagram.addUint16(avatar.getRequestID())
|
||||||
|
datagram.addUint32(avId)
|
||||||
|
self.send(datagram)
|
||||||
|
|
||||||
def handleGetAvatarDetailsResp(self, di):
|
def handleGetAvatarDetailsResp(self, di):
|
||||||
avId = di.getUint32()
|
avId = di.getUint32()
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
from direct.directnotify import DirectNotifyGlobal
|
from direct.directnotify import DirectNotifyGlobal
|
||||||
from direct.distributed.DistributedObjectGlobal import DistributedObjectGlobal
|
from direct.distributed.DistributedObjectGlobal import DistributedObjectGlobal
|
||||||
|
from direct.distributed.PyDatagram import PyDatagram
|
||||||
|
from direct.distributed.PyDatagramIterator import PyDatagramIterator
|
||||||
|
|
||||||
|
|
||||||
class ToontownFriendsManager(DistributedObjectGlobal):
|
class ToontownFriendsManager(DistributedObjectGlobal):
|
||||||
|
|
@ -13,3 +15,11 @@ class ToontownFriendsManager(DistributedObjectGlobal):
|
||||||
|
|
||||||
def friendOnline(self, doId, commonChatFlags, whitelistChatFlags):
|
def friendOnline(self, doId, commonChatFlags, whitelistChatFlags):
|
||||||
self.cr.handleFriendOnline(doId, commonChatFlags, whitelistChatFlags)
|
self.cr.handleFriendOnline(doId, commonChatFlags, whitelistChatFlags)
|
||||||
|
|
||||||
|
def sendGetAvatarDetailsRequest(self, avId):
|
||||||
|
self.sendUpdate('getAvatarDetailsRequest', [avId])
|
||||||
|
|
||||||
|
def getAvatarDetailsResponse(self, avatarDetails):
|
||||||
|
datagram = PyDatagram(avatarDetails)
|
||||||
|
di = PyDatagramIterator(datagram)
|
||||||
|
self.cr.handleGetAvatarDetailsResp(di)
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
from direct.directnotify import DirectNotifyGlobal
|
from direct.directnotify import DirectNotifyGlobal
|
||||||
from direct.distributed.DistributedObjectGlobalUD import DistributedObjectGlobalUD
|
from direct.distributed.DistributedObjectGlobalUD import DistributedObjectGlobalUD
|
||||||
|
from direct.distributed.PyDatagram import *
|
||||||
|
|
||||||
|
|
||||||
class FriendsOperation:
|
class FriendsOperation:
|
||||||
|
|
@ -17,6 +18,65 @@ class FriendsOperation:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class GetAvatarDetailsOperation(FriendsOperation):
|
||||||
|
|
||||||
|
def __init__(self, friendsManager, sender):
|
||||||
|
FriendsOperation.__init__(self, friendsManager, sender)
|
||||||
|
self.avId = None
|
||||||
|
self.dclass = None
|
||||||
|
self.fields = None
|
||||||
|
|
||||||
|
def start(self, avId):
|
||||||
|
self.avId = avId
|
||||||
|
self.fields = {}
|
||||||
|
self.friendsManager.air.dbInterface.queryObject(self.friendsManager.air.dbId, avId,
|
||||||
|
self.__handleAvatarRetrieved)
|
||||||
|
|
||||||
|
def __handleAvatarRetrieved(self, dclass, fields):
|
||||||
|
if dclass not in (self.friendsManager.air.dclassesByName['DistributedToonUD'],
|
||||||
|
self.friendsManager.air.dclassesByName['DistributedPetAI']):
|
||||||
|
self.__sendAvatarDetails(False)
|
||||||
|
self._handleError('Retrieved avatar is not a DistributedToonUD or DistributedPetAI!')
|
||||||
|
return
|
||||||
|
|
||||||
|
self.dclass = dclass
|
||||||
|
self.fields = fields
|
||||||
|
self.fields['avId'] = self.avId
|
||||||
|
self.__sendAvatarDetails(True)
|
||||||
|
self._handleDone()
|
||||||
|
|
||||||
|
def __packAvatarDetails(self, dclass, fields):
|
||||||
|
# Pack required fields.
|
||||||
|
fieldPacker = DCPacker()
|
||||||
|
for i in range(dclass.getNumInheritedFields()):
|
||||||
|
field = dclass.getInheritedField(i)
|
||||||
|
if not field.isRequired() or field.asMolecularField():
|
||||||
|
continue
|
||||||
|
|
||||||
|
k = field.getName()
|
||||||
|
v = fields.get(k, None)
|
||||||
|
|
||||||
|
fieldPacker.beginPack(field)
|
||||||
|
if not v:
|
||||||
|
fieldPacker.packDefaultValue()
|
||||||
|
else:
|
||||||
|
field.packArgs(fieldPacker, v)
|
||||||
|
|
||||||
|
fieldPacker.endPack()
|
||||||
|
|
||||||
|
return fieldPacker.getBytes()
|
||||||
|
|
||||||
|
def __sendAvatarDetails(self, success):
|
||||||
|
datagram = PyDatagram()
|
||||||
|
datagram.addUint32(self.fields['avId'])
|
||||||
|
datagram.addUint8(0 if success else 1)
|
||||||
|
if success:
|
||||||
|
details = self.__packAvatarDetails(self.dclass, self.fields)
|
||||||
|
datagram.appendData(details)
|
||||||
|
|
||||||
|
self.friendsManager.sendUpdateToAvatarId(self.sender, 'getAvatarDetailsResponse', [datagram.getMessage()])
|
||||||
|
|
||||||
|
|
||||||
class GetFriendsListOperation(FriendsOperation):
|
class GetFriendsListOperation(FriendsOperation):
|
||||||
|
|
||||||
def __init__(self, friendsManager, sender):
|
def __init__(self, friendsManager, sender):
|
||||||
|
|
@ -102,3 +162,6 @@ class ToontownFriendsManagerUD(DistributedObjectGlobalUD):
|
||||||
|
|
||||||
def getFriendsListRequest(self):
|
def getFriendsListRequest(self):
|
||||||
self.runOperation(GetFriendsListOperation)
|
self.runOperation(GetFriendsListOperation)
|
||||||
|
|
||||||
|
def getAvatarDetailsRequest(self, avId):
|
||||||
|
self.runOperation(GetAvatarDetailsOperation, avId)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue