from direct.interval.IntervalGlobal import Sequence from direct.task.Task import Task from panda3d.core import * from DistributedNPCToonBase import * import NPCToons from toontown.hood import ZoneUtil from toontown.minigame import ClerkPurchase from toontown.shtiker.PurchaseManagerConstants import * from toontown.toonbase import TTLocalizer from otp.nametag.NametagConstants import * class DistributedNPCClerk(DistributedNPCToonBase): def __init__(self, cr): DistributedNPCToonBase.__init__(self, cr) self.purchase = None self.isLocalToon = 0 self.av = None self.purchaseDoneEvent = 'purchaseDone' def disable(self): self.ignoreAll() taskMgr.remove(self.uniqueName('popupPurchaseGUI')) taskMgr.remove(self.uniqueName('lerpCamera')) if self.purchase: self.purchase.exit() self.purchase.unload() self.purchase = None self.av = None base.localAvatar.posCamera(0, 0) DistributedNPCToonBase.disable(self) def handleCollisionSphereEnter(self, collEntry): base.cr.playGame.getPlace().fsm.request('purchase') self.sendUpdate('avatarEnter', []) def __handleUnexpectedExit(self): self.notify.warning('unexpected exit') self.av = None def resetClerk(self): self.ignoreAll() taskMgr.remove(self.uniqueName('popupPurchaseGUI')) taskMgr.remove(self.uniqueName('lerpCamera')) if self.purchase: self.purchase.exit() self.purchase.unload() self.purchase = None self.clearMat() self.startLookAround() self.detectAvatars() if self.isLocalToon: self.showNametag2d() 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')) taskMgr.remove(self.uniqueName('lerpCamera')) 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: if self.isLocalToon: self.hideNametag2d() 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) seq = Sequence((camera.posQuatInterval(1, Vec3(-5, 9, self.getHeight() - 0.5), Vec3(-150, -2, 0), other=self, blendType='easeOut', name=self.uniqueName('lerpCamera')))) seq.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 def d_setInventory(self, invString, money, done): self.sendUpdate('setInventory', [invString, money, done])