mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-23 03:35:12 -06:00
181 lines
7.1 KiB
Python
181 lines
7.1 KiB
Python
from direct.gui.DirectGui import *
|
|
from direct.task.Task import Task
|
|
from panda3d.core import *
|
|
|
|
from DistributedNPCToonBase import *
|
|
import NPCToons
|
|
from toontown.hood import ZoneUtil
|
|
from toontown.pets import PetshopGUI
|
|
from toontown.toonbase import TTLocalizer
|
|
from otp.nametag.NametagConstants import *
|
|
|
|
|
|
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
|
|
|
|
def disable(self):
|
|
self.ignoreAll()
|
|
taskMgr.remove(self.uniqueName('popupPetshopGUI'))
|
|
taskMgr.remove(self.uniqueName('lerpCamera'))
|
|
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)
|
|
|
|
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 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 resetPetshopClerk(self):
|
|
self.ignoreAll()
|
|
taskMgr.remove(self.uniqueName('popupPetshopGUI'))
|
|
taskMgr.remove(self.uniqueName('lerpCamera'))
|
|
if self.petshopGui:
|
|
self.petshopGui.destroy()
|
|
self.petshopGui = None
|
|
self.show()
|
|
self.startLookAround()
|
|
self.detectAvatars()
|
|
self.clearMat()
|
|
if self.isLocalToon:
|
|
self.showNametag2d()
|
|
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)
|
|
|
|
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:
|
|
taskMgr.remove(self.uniqueName('lerpCamera'))
|
|
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:
|
|
self.hideNametag2d()
|
|
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()
|
|
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()
|
|
|
|
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)
|