toontown-just-works/toontown/uberdog/DistributedLobbyManager.py
2024-07-07 18:08:39 -05:00

69 lines
2.5 KiB
Python

from direct.directnotify import DirectNotifyGlobal
from direct.distributed.DistributedObject import DistributedObject
class DistributedLobbyManager(DistributedObject):
neverDisable = 1
notify = DirectNotifyGlobal.directNotify.newCategory('DistributedLobbyManager')
def __init__(self, cr):
DistributedObject.__init__(self, cr)
base.cr.lobbyManager = self
self.allowUnreleased = False
def delete(self):
DistributedObject.delete(self)
self.cr.lobbyManager = None
def disable(self):
self.ignore('deallocateZoneIdFromPlannedLobby')
self.ignoreAll()
DistributedObject.disable(self)
def generate(self):
DistributedObject.generate(self)
self.accept('deallocateZoneIdFromPlannedLobby', self.deallocateZoneIdFromPlannedLobby)
def deallocateZoneIdFromPlannedLobby(self, zoneId):
self.sendUpdate('freeZoneIdFromPlannedLobby', [base.localAvatar.doId, zoneId])
def allowUnreleasedClient(self):
return self.allowUnreleased
def setAllowUnreleaseClient(self, newValue):
self.allowUnreleased = newValue
def toggleAllowUnreleasedClient(self):
self.allowUnreleased = not self.allowUnreleased
return self.allowUnreleased
def sendAddLobby(self, hostId):
self.sendUpdate('addPartyRequest', [hostId])
def requestLobbyZone(self, avId, zoneId, callback):
if zoneId < 0:
zoneId = 0
self.acceptOnce('requestLobbyZoneComplete', callback)
if hasattr(base.localAvatar, 'aboutToCreateLobby'):
if base.localAvatar.aboutToCreateLobby:
self.sendUpdate('getLobbyZone', [avId, zoneId, True])
self.sendUpdate('getLobbyZone', [avId, zoneId, False])
def receiveLobbyZone(self, hostId, lobbyId, zoneId):
if lobbyId != 0 and zoneId != 0:
if base.localAvatar.doId == hostId:
lobbyInfo = base.localAvatar.hostedLobby
if lobbyInfo.lobbyId == lobbyId:
lobbyInfo.status == LobbyGlobals.LobbyStatus.Open
messenger.send('requestLobbyZoneComplete', [hostId, lobbyId, zoneId])
def leaveLobby(self):
if self.isDisabled():
return
self.sendUpdate('exitLobby', [localAvatar.zoneId])
def sendAvatarToLobby(self, hostId):
self.sendUpdate('requestShardIdZoneIdForHostId', [hostId])
def sendShardIdZoneIdToAvatar(self, shardId, zoneId):
# Avatar goes through door.
pass