historical/toontown-classic.git/toontown/toon/DistributedNPCPetclerk.py

208 lines
7.9 KiB
Python
Raw Normal View History

2024-01-16 11:20:27 -06:00
from panda3d.core import *
from DistributedNPCToonBase import *
from direct.gui.DirectGui import *
import NPCToons
from direct.task.Task import Task
from toontown.toonbase import TTLocalizer
from toontown.pets import PetshopGUI
from toontown.hood import ZoneUtil
from toontown.toontowngui import TeaserPanel
class DistributedNPCPetclerk(DistributedNPCToonBase):
def __init__(self, cr):
DistributedNPCToonBase.__init__(self, cr)
self.isLocalToon = 0
self.av = None
self.button = None
self.popupInfo = None
self.petshopGui = None
self.petSeeds = None
self.waitingForPetSeeds = False
self.cameraLerp = None
return
def disable(self):
self.ignoreAll()
taskMgr.remove(self.uniqueName('popupPetshopGUI'))
if self.cameraLerp:
self.cameraLerp.finish()
self.cameraLerp = None
if self.popupInfo:
self.popupInfo.destroy()
self.popupInfo = None
if self.petshopGui:
self.petshopGui.destroy()
self.petshopGui = None
self.av = None
if self.isLocalToon:
base.localAvatar.posCamera(0, 0)
DistributedNPCToonBase.disable(self)
return
def generate(self):
DistributedNPCToonBase.generate(self)
self.eventDict = {}
self.eventDict['guiDone'] = 'guiDone'
self.eventDict['petAdopted'] = 'petAdopted'
self.eventDict['petReturned'] = 'petReturned'
self.eventDict['fishSold'] = 'fishSold'
def getCollSphereRadius(self):
return 4.0
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='tricks', doneFunc=self.handleOkTeaser)
def __handleUnexpectedExit(self):
self.notify.warning('unexpected exit')
self.av = None
return
def resetPetshopClerk(self):
self.ignoreAll()
taskMgr.remove(self.uniqueName('popupPetshopGUI'))
if self.cameraLerp:
self.cameraLerp.finish()
self.cameraLerp = None
if self.petshopGui:
self.petshopGui.destroy()
self.petshopGui = None
self.show()
self.startLookAround()
self.detectAvatars()
self.clearMat()
if self.isLocalToon:
self.freeAvatar()
self.petSeeds = None
self.waitingForPetSeeds = False
return Task.done
def ignoreEventDict(self):
for event in self.eventDict.values():
self.ignore(event)
def setPetSeeds(self, petSeeds):
self.petSeeds = petSeeds
if self.waitingForPetSeeds:
self.waitingForPetSeeds = False
self.popupPetshopGUI(None)
return
def setMovie(self, mode, npcId, avId, extraArgs, timestamp):
timeStamp = ClockDelta.globalClockDelta.localElapsedTime(timestamp)
self.remain = NPCToons.CLERK_COUNTDOWN_TIME - timeStamp
self.npcId = npcId
self.isLocalToon = avId == base.localAvatar.doId
if mode == NPCToons.SELL_MOVIE_CLEAR:
return
if mode == NPCToons.SELL_MOVIE_TIMEOUT:
if self.cameraLerp:
self.cameraLerp.finish()
self.cameraLerp = None
if self.isLocalToon:
self.ignoreEventDict()
if self.popupInfo:
self.popupInfo.reparentTo(hidden)
if self.petshopGui:
self.petshopGui.destroy()
self.petshopGui = None
self.setChatAbsolute(TTLocalizer.STOREOWNER_TOOKTOOLONG, CFSpeech | CFTimeout)
self.resetPetshopClerk()
elif mode == NPCToons.SELL_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.cameraLerp = LerpPosQuatInterval(camera, 1, Point3(-5, 9, base.localAvatar.getHeight() - 0.5), Point3(-150, -2, 0), other=self, blendType='easeOut', name=self.uniqueName('lerpCamera'))
self.cameraLerp.start()
if self.isLocalToon:
taskMgr.doMethodLater(1.0, self.popupPetshopGUI, self.uniqueName('popupPetshopGUI'))
elif mode == NPCToons.SELL_MOVIE_COMPLETE:
self.setChatAbsolute(TTLocalizer.STOREOWNER_THANKSFISH_PETSHOP, CFSpeech | CFTimeout)
self.resetPetshopClerk()
elif mode == NPCToons.SELL_MOVIE_PETRETURNED:
self.setChatAbsolute(TTLocalizer.STOREOWNER_PETRETURNED, CFSpeech | CFTimeout)
self.resetPetshopClerk()
elif mode == NPCToons.SELL_MOVIE_PETADOPTED:
self.setChatAbsolute(TTLocalizer.STOREOWNER_PETADOPTED, CFSpeech | CFTimeout)
self.resetPetshopClerk()
elif mode == NPCToons.SELL_MOVIE_PETCANCELED:
self.setChatAbsolute(TTLocalizer.STOREOWNER_PETCANCELED, CFSpeech | CFTimeout)
self.resetPetshopClerk()
elif mode == NPCToons.SELL_MOVIE_TROPHY:
self.av = base.cr.doId2do.get(avId)
if self.av is None:
self.notify.warning('Avatar %d not found in doId' % avId)
return
else:
numFish, totalNumFish = extraArgs
self.setChatAbsolute(TTLocalizer.STOREOWNER_TROPHY % (numFish, totalNumFish), CFSpeech | CFTimeout)
self.resetPetshopClerk()
elif mode == NPCToons.SELL_MOVIE_NOFISH:
self.setChatAbsolute(TTLocalizer.STOREOWNER_NOFISH, CFSpeech | CFTimeout)
self.resetPetshopClerk()
elif mode == NPCToons.SELL_MOVIE_NO_MONEY:
self.notify.warning('SELL_MOVIE_NO_MONEY should not be called')
self.resetPetshopClerk()
return
def __handlePetAdopted(self, whichPet, nameIndex):
if base.config.GetBool('want-qa-regression', 0):
self.notify.info('QA-REGRESSION: ADOPTADOOLE: Adopt a doodle.')
base.cr.removePetFromFriendsMap()
self.ignore(self.eventDict['petAdopted'])
self.sendUpdate('petAdopted', [whichPet, nameIndex])
def __handlePetReturned(self):
base.cr.removePetFromFriendsMap()
self.ignore(self.eventDict['petReturned'])
self.sendUpdate('petReturned')
def __handleFishSold(self):
self.ignore(self.eventDict['fishSold'])
self.sendUpdate('fishSold')
def __handleGUIDone(self, bTimedOut = False):
self.ignore(self.eventDict['guiDone'])
self.petshopGui.destroy()
self.petshopGui = None
if not bTimedOut:
self.sendUpdate('transactionDone')
return
def popupPetshopGUI(self, task):
if not self.petSeeds:
self.waitingForPetSeeds = True
return
self.setChatAbsolute('', CFSpeech)
self.acceptOnce(self.eventDict['guiDone'], self.__handleGUIDone)
self.acceptOnce(self.eventDict['petAdopted'], self.__handlePetAdopted)
self.acceptOnce(self.eventDict['petReturned'], self.__handlePetReturned)
self.acceptOnce(self.eventDict['fishSold'], self.__handleFishSold)
self.petshopGui = PetshopGUI.PetshopGUI(self.eventDict, self.petSeeds)