Poodletooth-iLand/toontown/estate/DistributedMailboxAI.py

127 lines
3.9 KiB
Python

from direct.distributed.DistributedObjectAI import DistributedObjectAI
from toontown.toonbase import ToontownGlobals
from toontown.estate import MailboxGlobals
class DistributedMailboxAI(DistributedObjectAI):
notify = directNotify.newCategory('DistributedMailboxAI')
def __init__(self, air, house):
DistributedObjectAI.__init__(self, air)
self.busy = False
self.user = None
self.house = house
self.houseId = self.house.doId
self.housePos = self.house.housePos
self.name = self.house.name
def generate(self):
DistributedObjectAI.generate(self)
self.updateIndicatorFlag()
def getHouseId(self):
return self.houseId
def getHousePos(self):
return self.housePos
def getName(self):
return self.name
def avatarEnter(self):
if self.busy:
return
avId = self.air.getAvatarIdFromSender()
if avId != self.house.avatarId:
self.setMovie(MailboxGlobals.MAILBOX_MOVIE_NOT_OWNER, avId)
self.resetMovie()
return
av = self.air.doId2do.get(avId)
if not av:
return
if len(av.mailboxContents):
self.setMovie(MailboxGlobals.MAILBOX_MOVIE_READY, avId)
self.user = avId
self.busy = True
elif len(av.onOrder):
self.setMovie(MailboxGlobals.MAILBOX_MOVIE_WAITING, avId)
else:
self.setMovie(MailboxGlobals.MAILBOX_MOVIE_EMPTY, avId)
self.resetMovie()
def avatarExit(self):
avId = self.air.getAvatarIdFromSender()
if avId != self.user:
return
self.user = None
self.busy = False
self.updateIndicatorFlag()
self.setMovie(MailboxGlobals.MAILBOX_MOVIE_EXIT, avId)
self.sendUpdateToAvatarId(avId, 'freeAvatar', [])
self.resetMovie()
def setMovie(self, movie, avId):
self.sendUpdate('setMovie', [movie, avId])
def resetMovie(self):
taskMgr.doMethodLater(2, self.setMovie, 'resetMovie-%d' % self.doId, extraArgs=[MailboxGlobals.MAILBOX_MOVIE_CLEAR, 0])
def updateIndicatorFlag(self):
av = self.air.doId2do.get(self.house.avatarId)
if av:
self.sendUpdate('setFullIndicator', [len(av.mailboxContents)])
else:
self.sendUpdate('setFullIndicator', [0])
def acceptItemMessage(self, context, item, index, optional):
avId = self.air.getAvatarIdFromSender()
if avId != self.user:
return
av = self.air.doId2do.get(avId)
if not av:
return
if index >= len(av.mailboxContents):
self.sendUpdateToAvatarId(avId, 'acceptItemResponse', [context, ToontownGlobals.P_InvalidIndex])
return
item = av.mailboxContents[index]
returnCode = item.recordPurchase(av, optional)
if returnCode == ToontownGlobals.P_ItemAvailable:
del av.mailboxContents[index]
av.b_setMailboxContents(av.mailboxContents)
self.sendUpdateToAvatarId(avId, 'acceptItemResponse', [context, returnCode])
def discardItemMessage(self, context, item, index, optional):
avId = self.air.getAvatarIdFromSender()
if avId != self.user:
return
av = self.air.doId2do.get(avId)
if not av:
return
if index >= len(av.mailboxContents):
self.sendUpdateToAvatarId(avId, 'discardItemResponse', [context, ToontownGlobals.P_InvalidIndex])
return
del av.mailboxContents[index]
av.b_setMailboxContents(av.mailboxContents)
self.sendUpdateToAvatarId(avId, 'discardItemResponse', [context, ToontownGlobals.P_ItemAvailable])
def acceptInviteMessage(self, todo0, todo1):
pass # TODO
def rejectInviteMessage(self, todo0, todo1):
pass # TODO
def markInviteReadButNotReplied(self, todo0):
pass # TODO