142 lines
5.5 KiB
Python
142 lines
5.5 KiB
Python
from pandac.PandaModules import *
|
|
from .DistributedNPCToonBase import *
|
|
from toontown.minigame import ClerkPurchase
|
|
from toontown.shtiker.PurchaseManagerConstants import *
|
|
from . import NPCToons
|
|
from direct.task.Task import Task
|
|
from toontown.toonbase import TTLocalizer
|
|
from toontown.hood import ZoneUtil
|
|
from toontown.toontowngui import TeaserPanel
|
|
|
|
class DistributedNPCClerk(DistributedNPCToonBase):
|
|
|
|
def __init__(self, cr):
|
|
DistributedNPCToonBase.__init__(self, cr)
|
|
self.purchase = None
|
|
self.isLocalToon = 0
|
|
self.av = None
|
|
self.purchaseDoneEvent = 'purchaseDone'
|
|
self.lerpCameraSeq = None
|
|
return
|
|
|
|
def disable(self):
|
|
self.ignoreAll()
|
|
taskMgr.remove(self.uniqueName('popupPurchaseGUI'))
|
|
if self.lerpCameraSeq:
|
|
self.lerpCameraSeq.finish()
|
|
self.lerpCameraSeq = None
|
|
if self.purchase:
|
|
self.purchase.exit()
|
|
self.purchase.unload()
|
|
self.purchase = None
|
|
self.av = None
|
|
base.localAvatar.posCamera(0, 0)
|
|
DistributedNPCToonBase.disable(self)
|
|
return
|
|
|
|
def allowedToEnter(self):
|
|
if hasattr(base, 'ttAccess') and base.ttAccess and base.ttAccess.canAccess():
|
|
return True
|
|
return False
|
|
|
|
def handleOkTeaser(self):
|
|
self.dialog.destroy()
|
|
del self.dialog
|
|
place = base.cr.playGame.getPlace()
|
|
if place:
|
|
place.fsm.request('walk')
|
|
|
|
def handleCollisionSphereEnter(self, collEntry):
|
|
if self.allowedToEnter():
|
|
base.cr.playGame.getPlace().fsm.request('purchase')
|
|
self.sendUpdate('avatarEnter', [])
|
|
else:
|
|
place = base.cr.playGame.getPlace()
|
|
if place:
|
|
place.fsm.request('stopped')
|
|
self.dialog = TeaserPanel.TeaserPanel(pageName='otherGags', doneFunc=self.handleOkTeaser)
|
|
|
|
def __handleUnexpectedExit(self):
|
|
self.notify.warning('unexpected exit')
|
|
self.av = None
|
|
return
|
|
|
|
def resetClerk(self):
|
|
self.ignoreAll()
|
|
taskMgr.remove(self.uniqueName('popupPurchaseGUI'))
|
|
if self.lerpCameraSeq:
|
|
self.lerpCameraSeq.finish()
|
|
self.lerpCameraSeq = None
|
|
if self.purchase:
|
|
self.purchase.exit()
|
|
self.purchase.unload()
|
|
self.purchase = None
|
|
self.clearMat()
|
|
self.startLookAround()
|
|
self.detectAvatars()
|
|
if self.isLocalToon:
|
|
self.freeAvatar()
|
|
return Task.done
|
|
|
|
def setMovie(self, mode, npcId, avId, timestamp):
|
|
timeStamp = ClockDelta.globalClockDelta.localElapsedTime(timestamp)
|
|
self.remain = NPCToons.CLERK_COUNTDOWN_TIME - timeStamp
|
|
self.isLocalToon = avId == base.localAvatar.doId
|
|
if mode == NPCToons.PURCHASE_MOVIE_CLEAR:
|
|
return
|
|
if mode == NPCToons.PURCHASE_MOVIE_TIMEOUT:
|
|
taskMgr.remove(self.uniqueName('popupPurchaseGUI'))
|
|
if self.lerpCameraSeq:
|
|
self.lerpCameraSeq.finish()
|
|
self.lerpCameraSeq = None
|
|
if self.isLocalToon:
|
|
self.ignore(self.purchaseDoneEvent)
|
|
if self.purchase:
|
|
self.__handlePurchaseDone()
|
|
self.setChatAbsolute(TTLocalizer.STOREOWNER_TOOKTOOLONG, CFSpeech | CFTimeout)
|
|
self.resetClerk()
|
|
elif mode == NPCToons.PURCHASE_MOVIE_START:
|
|
self.av = base.cr.doId2do.get(avId)
|
|
if self.av is None:
|
|
self.notify.warning('Avatar %d not found in doId' % avId)
|
|
return
|
|
else:
|
|
self.accept(self.av.uniqueName('disable'), self.__handleUnexpectedExit)
|
|
self.setupAvatars(self.av)
|
|
if self.isLocalToon:
|
|
camera.wrtReparentTo(render)
|
|
self.lerpCameraSeq = camera.posQuatInterval(1, Point3(-5, 9, self.getHeight() - 0.5), Point3(-150, -2, 0), other=self, blendType='easeOut', name=self.uniqueName('lerpCamera'))
|
|
self.lerpCameraSeq.start()
|
|
self.setChatAbsolute(TTLocalizer.STOREOWNER_GREETING, CFSpeech | CFTimeout)
|
|
if self.isLocalToon:
|
|
taskMgr.doMethodLater(1.0, self.popupPurchaseGUI, self.uniqueName('popupPurchaseGUI'))
|
|
elif mode == NPCToons.PURCHASE_MOVIE_COMPLETE:
|
|
self.setChatAbsolute(TTLocalizer.STOREOWNER_GOODBYE, CFSpeech | CFTimeout)
|
|
self.resetClerk()
|
|
elif mode == NPCToons.PURCHASE_MOVIE_NO_MONEY:
|
|
self.setChatAbsolute(TTLocalizer.STOREOWNER_NEEDJELLYBEANS, CFSpeech | CFTimeout)
|
|
self.resetClerk()
|
|
return
|
|
|
|
def popupPurchaseGUI(self, task):
|
|
self.setChatAbsolute('', CFSpeech)
|
|
self.acceptOnce(self.purchaseDoneEvent, self.__handlePurchaseDone)
|
|
self.accept('boughtGag', self.__handleBoughtGag)
|
|
self.purchase = ClerkPurchase.ClerkPurchase(base.localAvatar, self.remain, self.purchaseDoneEvent)
|
|
self.purchase.load()
|
|
self.purchase.enter()
|
|
return Task.done
|
|
|
|
def __handleBoughtGag(self):
|
|
self.d_setInventory(base.localAvatar.inventory.makeNetString(), base.localAvatar.getMoney(), 0)
|
|
|
|
def __handlePurchaseDone(self):
|
|
self.ignore('boughtGag')
|
|
self.d_setInventory(base.localAvatar.inventory.makeNetString(), base.localAvatar.getMoney(), 1)
|
|
self.purchase.exit()
|
|
self.purchase.unload()
|
|
self.purchase = None
|
|
return
|
|
|
|
def d_setInventory(self, invString, money, done):
|
|
self.sendUpdate('setInventory', [invString, money, done])
|