mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-23 11:42:39 -06:00
100 lines
3.4 KiB
Python
100 lines
3.4 KiB
Python
|
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 otp.nametag.NametagConstants import WTSystem
|
||
|
from otp.margins.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, chatSettings, 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.handleChatSettings(chatSettings)
|
||
|
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)
|