Poodletooth-iLand/toontown/uberdog/ClientServicesManager.py

98 lines
3.3 KiB
Python
Executable file

from direct.directnotify.DirectNotifyGlobal import directNotify
from direct.distributed.DistributedObjectGlobal import DistributedObjectGlobal
import hmac
from panda3d.core import *
from otp.distributed.PotentialAvatar import PotentialAvatar
from otp.otpbase import OTPGlobals
from toontown.chat.ChatGlobals import WTSystem
from toontown.chat.WhisperPopup import WhisperPopup
class ClientServicesManager(DistributedObjectGlobal):
notify = directNotify.newCategory('ClientServicesManager')
# --- LOGIN LOGIC ---
def performLogin(self, doneEvent):
self.doneEvent = doneEvent
self.systemMessageSfx = None
token = self.cr.playToken or 'dev'
key = 'c603c5833021ce79f734943f6e662250fd4ecf7432bf85905f71707dc4a9370c6ae15a8716302ead43810e5fba3cf0876bbbfce658e2767b88d916f5d89fd31'
digest_maker = hmac.new(key)
digest_maker.update(token)
clientKey = digest_maker.hexdigest()
self.sendUpdate('login', [token, clientKey])
def acceptLogin(self, timestamp):
messenger.send(self.doneEvent, [{'mode': 'success', 'timestamp': timestamp}])
# --- AVATARS LIST ---
def requestAvatars(self):
self.sendUpdate('requestAvatars')
def setAvatars(self, avatars):
avList = []
for avNum, avName, avDNA, avPosition, nameState in avatars:
nameOpen = int(nameState == 1)
names = [avName, '', '', '']
if nameState == 2: # PENDING
names[1] = avName
elif nameState == 3: # APPROVED
names[2] = avName
elif nameState == 4: # REJECTED
names[3] = avName
avList.append(PotentialAvatar(avNum, names, avDNA, avPosition, nameOpen))
self.cr.handleAvatarsList(avList)
# --- AVATAR CREATION/DELETION ---
def sendCreateAvatar(self, avDNA, _, index):
self.sendUpdate('createAvatar', [avDNA.makeNetString(), index])
def createAvatarResp(self, avId):
messenger.send('nameShopCreateAvatarDone', [avId])
def sendDeleteAvatar(self, avId):
self.sendUpdate('deleteAvatar', [avId])
# No deleteAvatarResp; it just sends a setAvatars when the deed is done.
# --- AVATAR NAMING ---
def sendSetNameTyped(self, avId, name, callback):
self._callback = callback
self.sendUpdate('setNameTyped', [avId, name])
def setNameTypedResp(self, avId, status):
self._callback(avId, status)
def sendSetNamePattern(self, avId, p1, f1, p2, f2, p3, f3, p4, f4, callback):
self._callback = callback
self.sendUpdate('setNamePattern', [avId, p1, f1, p2, f2, p3, f3, p4, f4])
def setNamePatternResp(self, avId, status):
self._callback(avId, status)
def sendAcknowledgeAvatarName(self, avId, callback):
self._callback = callback
self.sendUpdate('acknowledgeAvatarName', [avId])
def acknowledgeAvatarNameResp(self):
self._callback()
# --- AVATAR CHOICE ---
def sendChooseAvatar(self, avId):
self.sendUpdate('chooseAvatar', [avId])
def systemMessage(self, message):
whisper = WhisperPopup(message, OTPGlobals.getInterfaceFont(), WTSystem)
whisper.manage(base.marginManager)
if self.systemMessageSfx is None:
self.systemMessageSfx = base.loadSfx('phase_3/audio/sfx/clock03.ogg')
base.playSfx(self.systemMessageSfx)