def canAccess(self, zoneId=None):
     if base.cr.isPaid():
         return True
     allowed = False
     allowedZones = [
         ToontownGlobals.ToontownCentral,
         ToontownGlobals.MyEstate,
         ToontownGlobals.GoofySpeedway,
         ToontownGlobals.Tutorial,
     ]
     specialZones = [ToontownGlobals.SellbotLobby]
     if hasattr(base.cr, "newsManager") and base.cr.newsManager:
         holidayIds = base.cr.newsManager.getHolidayIdList()
         if ToontownGlobals.SELLBOT_NERF_HOLIDAY in holidayIds:
             specialZones.append(ToontownGlobals.SellbotHQ)
     place = base.cr.playGame.getPlace()
     if zoneId:
         myHoodId = ZoneUtil.getCanonicalHoodId(zoneId)
     else:
         myHoodId = ZoneUtil.getCanonicalHoodId(place.zoneId)
     if hasattr(place, "id"):
         myHoodId = place.id
     if myHoodId in allowedZones:
         allowed = True
     elif zoneId and zoneId in specialZones:
         allowed = True
     return allowed
Пример #2
0
    def canAccess(self, zoneId=None):
        if base.cr.isPaid():
            return True

        allowed = False
        allowedZones = [
            ToontownGlobals.ToontownCentral, ToontownGlobals.MyEstate,
            ToontownGlobals.GoofySpeedway, ToontownGlobals.Tutorial
        ]
        specialZones = [ToontownGlobals.SellbotLobby]
        if hasattr(base.cr, 'newsManager') and base.cr.newsManager:
            holidayIds = base.cr.newsManager.getHolidayIdList()
            if ToontownGlobals.SELLBOT_NERF_HOLIDAY in holidayIds:
                specialZones.append(ToontownGlobals.SellbotHQ)

        place = base.cr.playGame.getPlace()
        if zoneId:
            myHoodId = ZoneUtil.getCanonicalHoodId(zoneId)
        else:
            myHoodId = ZoneUtil.getCanonicalHoodId(place.zoneId)
        if hasattr(place, 'id'):
            myHoodId = place.id

        if myHoodId in allowedZones:
            allowed = True
        elif zoneId and zoneId in specialZones:
            allowed = True

        return allowed
    def teleportToShop(self, npcId):
        if base.cr.playGame.getPlace().getState() != 'walk':
            return

        npcZone = NPCToons.getNPCZone(npcId)
        npcHood = ZoneUtil.getCanonicalHoodId(npcZone)
        hqZone = {2000:2520, 1000:1507, 3000:3508, 4000:4504, 5000:5502, 7000:7503, 9000:9505}

        if npcZone in (-1, 0, None):
            zoneId = base.localAvatar.getZoneId()
            if ZoneUtil.isDynamicZone(zoneId) or ZoneUtil.isCogHQZone(zoneId):
                zoneId = 2000 
            npcHood = ZoneUtil.getCanonicalHoodId(zoneId)
            npcZone = hqZone.get(npcHood, 2520)
        
        cost = ToontownGlobals.getTeleportButtonCost(npcHood)
        self.destroyDialog()
        base.cr.playGame.getPlace().setState('stopped')
        
        if base.localAvatar.getTotalMoney() < cost:
            self.dialog = TTDialog.TTDialog(style=TTDialog.Acknowledge, text=TTLocalizer.TeleportButtonNoMoney % cost, command=self.destroyDialog)
        else:
            self.dialog = TTDialog.TTDialog(style=TTDialog.YesNo, text=TTLocalizer.TeleportButtonConfirm % cost, command=lambda value: self.teleportToShopConfirm(npcZone, npcHood, cost, value))

        self.dialog.show()
Пример #4
0
    def enter(self):
        ShtikerPage.ShtikerPage.enter(self)
        try:
            zone = base.cr.playGame.getPlace().getZoneId()
        except:
            zone = 0

        if base.localAvatar.lastHood >= ToontownGlobals.BossbotHQ:
            self.safeZoneButton['text'] = TTLocalizer.MapPageBackToCogHQ
        else:
            self.safeZoneButton['text'] = TTLocalizer.MapPageBackToPlayground
        if zone and ZoneUtil.isPlayground(zone) or self.book.safeMode:
            self.safeZoneButton.hide()
        else:
            self.safeZoneButton.show()
        if base.cr.playGame.getPlaceId() == ToontownGlobals.MyEstate and base.cr.playGame.hood.loader.atMyEstate() or self.book.safeMode:
            self.goHomeButton.hide()
        elif base.housingEnabled:
            self.goHomeButton.show()
        if base.cr.playGame.getPlaceId() == ToontownGlobals.MyEstate:
            if base.cr.playGame.hood.loader.atMyEstate():
                self.hoodLabel['text'] = TTLocalizer.MapPageYouAreAtHome
                self.hoodLabel.show()
            else:
                avatar = base.cr.identifyAvatar(base.cr.playGame.hood.loader.estateOwnerId)
                if avatar:
                    avName = avatar.getName()
                    self.hoodLabel['text'] = TTLocalizer.MapPageYouAreAtSomeonesHome % TTLocalizer.GetPossesive(avName)
                    self.hoodLabel.show()
        elif zone:
            hoodName = ToontownGlobals.hoodNameMap.get(ZoneUtil.getCanonicalHoodId(zone), ('',))[-1]
            streetName = ToontownGlobals.StreetNames.get(ZoneUtil.getCanonicalBranchZone(zone), ('',))[-1]
            if hoodName:
                self.hoodLabel['text'] = TTLocalizer.MapPageYouAreHere % (hoodName, streetName)
                self.hoodLabel.show()
            else:
                self.hoodLabel.hide()
        else:
            self.hoodLabel.hide()
        safeZonesVisited = base.localAvatar.hoodsVisited
        hoodTeleportList = base.localAvatar.getTeleportAccess()
        for hood in self.allZones:
            label = self.labels[self.allZones.index(hood)]
            clouds = self.clouds[self.allZones.index(hood)]
            if not self.book.safeMode and hood in safeZonesVisited:
                label['text_fg'] = (0, 0, 0, 1)
                label.show()
                for cloud in clouds:
                    cloud.hide()

                fullname = base.cr.hoodMgr.getFullnameFromId(hood)
                if hood in hoodTeleportList:
                    text = TTLocalizer.MapPageGoTo % fullname
                    label['text'] = ('', text, text)
                else:
                    label['text'] = ('', fullname, fullname)
            else:
                label.hide()
                for cloud in clouds:
                    cloud.show()
 def setup(self):
     interior = loader.loadModel('phase_14/models/modules/pizzeria')
     self.interior = interior.copyTo(render)
     self.interior.find('**/floor').setBin('ground', -10)
     self.dnaStore = base.cr.playGame.dnaStore
     self.randomGenerator = random.Random()
     self.randomGenerator.seed(self.zoneId)
     hoodId = ZoneUtil.getCanonicalHoodId(self.zoneId)
     self.colors = ToonInteriorColors.colors[hoodId]
     door = self.dnaStore.findNode('door_double_round_ur')
     doorOrigin = self.interior.attachNewNode('door_origin')
     doorOrigin.setPos(0, 31.5, 0)
     doorOriginNPName = doorOrigin.getName()
     doorOriginIndexStr = doorOriginNPName[len('door_origin_'):]
     newNode = ModelNode('door_' + doorOriginIndexStr)
     newNodePath = NodePath(newNode)
     newNodePath.reparentTo(self.interior)
     doorNP = door.copyTo(newNodePath)
     doorOrigin.setScale(0.8, 0.8, 0.8)
     doorOrigin.setPos(doorOrigin, 0, -0.025, 0)
     color = self.randomGenerator.choice(self.colors['TI_door'])
     triggerId = str(self.block) + '_' + doorOriginIndexStr
     DNADoor.setupDoor(doorNP, newNodePath, doorOrigin, self.dnaStore,
                       str(self.block), color)
     doorFrame = doorNP.find('door_*_flat')
     doorFrame.setColor(color)
    def replaceRandom(self, root, generator=random):
        for nodePath in root.findAllMatches('**/random_???_*'):
            name = nodePath.getName()

            category = name[11:]

            if name[7] in ('m', 't'):
                codeCount = self.cr.playGame.dnaStore.getNumCatalogCodes(
                    category)
                index = generator.randint(0, codeCount - 1)
                code = self.cr.playGame.dnaStore.getCatalogCode(
                    category, index)
                if name[7] == 'm':
                    _nodePath = self.cr.playGame.dnaStore.findNode(
                        code).copyTo(nodePath)
                    if name[8] == 'r':
                        self.replaceRandom(_nodePath, generator=generator)
                else:
                    texture = self.cr.playGame.dnaStore.findTexture(code)
                    nodePath.setTexture(texture, 100)
                    _nodePath = nodePath

            if name[8] == 'c':
                hoodId = ZoneUtil.getCanonicalHoodId(self.zoneId)
                colors = ToonInteriorColors.colors[hoodId]
                _nodePath.setColorScale(generator.choice(colors[category]))
    def announceGenerate(self):
        DistributedObject.announceGenerate(self)

        self.interior = loader.loadModel(
            'phase_4/models/modules/ttc_library_interior.bam')
        self.interior.reparentTo(render)

        generator = random.Random()
        generator.seed(self.zoneId)
        self.replaceRandom(self.interior, generator=generator)

        doorOrigin = self.interior.find('**/door_origin;+s')
        doorOrigin.setScale(0.8)
        doorOrigin.setY(doorOrigin, -0.025)

        door = self.cr.playGame.dnaStore.findNode('door_double_round_ur')
        doorNodePath = door.copyTo(doorOrigin)

        hoodId = ZoneUtil.getCanonicalHoodId(self.zoneId)
        doorColor = ToonInteriorColors.colors[hoodId]['TI_door'][0]
        DNADoor.setupDoor(doorNodePath,
                          self.interior, doorOrigin, self.cr.playGame.dnaStore,
                          str(self.block), doorColor)

        doorFrame = doorNodePath.find('door_double_round_ur_flat')
        doorFrame.wrtReparentTo(self.interior)
        doorFrame.setColor(doorColor)

        for npcToon in self.cr.doFindAllInstances(DistributedNPCToonBase):
            npcToon.initToonState()
Пример #8
0
    def showChoicePoster(self, questId, fromNpcId, toNpcId, rewardId, callback):
        self.update((questId,
         fromNpcId,
         toNpcId,
         rewardId,
         0))
        quest = Quests.getQuest(questId)
        self.rewardText.show()
        self.rewardText.setZ(-0.205)
        self.questProgress.hide()
        if not hasattr(self, 'chooseButton'):
            guiButton = loader.loadModel('phase_3/models/gui/quit_button')
            self.chooseButton = DirectButton(parent=self.questFrame, relief=None, image=(guiButton.find('**/QuitBtn_UP'), guiButton.find('**/QuitBtn_DN'), guiButton.find('**/QuitBtn_RLVR')), image_scale=(0.7, 1, 1), text=TTLocalizer.QuestPageChoose, text_scale=0.06, text_pos=(0, -0.02), pos=(0.285, 0, 0.245), scale=0.65)
            guiButton.removeNode()
        npcZone = NPCToons.getNPCZone(toNpcId)
        hoodId = ZoneUtil.getCanonicalHoodId(npcZone)
        if not base.cr.isPaid() and (questId == 401 or hasattr(quest, 'getLocation') and quest.getLocation() == 1000 or hoodId == 1000):

            def showTeaserPanel():
                TeaserPanel(pageName='getGags')

            self.chooseButton['command'] = showTeaserPanel
        else:
            self.chooseButton['command'] = callback
            self.chooseButton['extraArgs'] = [questId]
        self.unbind(DGG.WITHIN)
        self.unbind(DGG.WITHOUT)
        if not quest.getType() == Quests.TrackChoiceQuest:
            self.questInfo.setZ(-0.0625)
        return
    def announceGenerate(self):
        DistributedObject.announceGenerate(self)

        self.interior = loader.loadModel('phase_4/models/modules/ttc_library_interior.bam')
        self.interior.reparentTo(render)

        generator = random.Random()
        generator.seed(self.zoneId)
        self.replaceRandom(self.interior, generator=generator)

        doorOrigin = self.interior.find('**/door_origin;+s')
        doorOrigin.setScale(0.8)
        doorOrigin.setY(doorOrigin, -0.025)

        door = self.cr.playGame.dnaStore.findNode('door_double_round_ur')
        doorNodePath = door.copyTo(doorOrigin)

        hoodId = ZoneUtil.getCanonicalHoodId(self.zoneId)
        doorColor = ToonInteriorColors.colors[hoodId]['TI_door'][0]
        DNADoor.setupDoor(
            doorNodePath, self.interior, doorOrigin, self.cr.playGame.dnaStore,
            str(self.block), doorColor)

        doorFrame = doorNodePath.find('door_double_round_ur_flat')
        doorFrame.wrtReparentTo(self.interior)
        doorFrame.setColor(doorColor)

        for npcToon in self.cr.doFindAllInstances(DistributedNPCToonBase):
            npcToon.initToonState()
Пример #10
0
    def genDNAFileName(self):
        """
        ////////////////////////////////////////////////////////////////////
        // Function:    determines the name of the DNA file that should
        //              be loaded for the neighborhood that this suit
        //              planner manages
        // Parameters:  none
        // Changes:     none
        ////////////////////////////////////////////////////////////////////
        """
        # This code might run on the AI or on the client.
        try:
            return simbase.air.genDNAFileName(self.getZoneId())

        except:
            # do some number manipulation of my zone id already given
            # to me and figure out which dna file to load

            zoneId = ZoneUtil.getCanonicalZoneId(self.getZoneId())
            hoodId = ZoneUtil.getCanonicalHoodId(zoneId)
            hood = ToontownGlobals.dnaMap[hoodId]
            phase = ToontownGlobals.streetPhaseMap[hoodId]
            if hoodId == zoneId:
                zoneId = "sz"

            return "phase_%s/dna/%s_%s.dna" % (phase, hood, zoneId)
Пример #11
0
 def setup(self):
     self.dnaStore = base.cr.playGame.dnaStore
     self.randomGenerator = random.Random()
     self.randomGenerator.seed(self.zoneId)
     interior = self.randomDNAItem('TI_hall', self.dnaStore.findNode)
     self.interior = interior.copyTo(render)
     hoodId = ZoneUtil.getCanonicalHoodId(self.zoneId)
     self.colors = ToonInteriorColors.colors[hoodId]
     self.replaceRandomInModel(self.interior)
     doorModelName = 'door_double_round_ul'
     if doorModelName[-1:] == 'r':
         doorModelName = doorModelName[:-1] + 'l'
     else:
         doorModelName = doorModelName[:-1] + 'r'
     door = self.dnaStore.findNode(doorModelName)
     door_origin = render.find('**/door_origin;+s')
     doorNP = door.copyTo(door_origin)
     door_origin.setScale(0.80000000000000004, 0.80000000000000004,
                          0.80000000000000004)
     door_origin.setPos(door_origin, 0, -0.025000000000000001, 0)
     color = self.randomGenerator.choice(self.colors['TI_door'])
     DNADoor.setupDoor(doorNP, self.interior, door_origin, self.dnaStore,
                       str(self.block), color)
     doorFrame = doorNP.find('door_*_flat')
     doorFrame.wrtReparentTo(self.interior)
     doorFrame.setColor(color)
     del self.colors
     del self.dnaStore
     del self.randomGenerator
     self.interior.flattenMedium()
     self.sillyFSM.enterInitialState()
def openToAll(zoneId, avatar):
    allowed = False
    canonicalZoneId = ZoneUtil.getCanonicalHoodId(zoneId)
    allowedZones = [
        ToontownGlobals.ToontownCentral,
        ToontownGlobals.MyEstate,
        ToontownGlobals.GoofySpeedway,
        ToontownGlobals.Tutorial,
    ]
    specialZones = [ToontownGlobals.SellbotLobby]
    if ToontownGlobals.SELLBOT_NERF_HOLIDAY in simbase.air.holidayManager.currentHolidays:
        specialZones.append(ToontownGlobals.SellbotHQ)
    ownerId = simbase.air.estateMgr.getOwnerFromZone(zoneId)
    if ownerId:
        for zone in simbase.air.estateMgr.getEstateZones(ownerId):
            specialZones.append(zone)

    if canonicalZoneId in allowedZones or avatar.isInEstate():
        allowed = True
    elif zoneId in specialZones:
        allowed = True
    elif canonicalZoneId >= ToontownGlobals.DynamicZonesBegin and not avatar.getTutorialAck():
        zoneDict = simbase.air.tutorialManager.playerDict.get(avatar.doId)
        if zoneDict:
            allowed = True
    return allowed
Пример #13
0
    def replaceStreetSignTextures(self):
        if not hasattr(base.cr, 'playGame'):
            return
        place = base.cr.playGame.getPlace()
        if place is None:
            return
        geom = base.cr.playGame.getPlace().loader.geom
        signs = geom.findAllMatches('**/*tunnelAheadSign*;+s')
        if signs.getNumPaths() > 0:
            streetSign = base.cr.streetSign
            signTexturePath = streetSign.StreetSignBaseDir + '/' + streetSign.StreetSignFileName
            loaderTexturePath = Filename(str(signTexturePath))
            alphaPath = 'phase_4/maps/tt_t_ara_gen_tunnelAheadSign_a.rgb'
            inDreamland = False
            if place.zoneId and ZoneUtil.getCanonicalHoodId(
                    place.zoneId) == ToontownGlobals.DonaldsDreamland:
                inDreamland = True
            alphaPath = 'phase_4/maps/tt_t_ara_gen_tunnelAheadSign_a.rgb'
            if Filename(signTexturePath).exists():
                signTexture = loader.loadTexture(loaderTexturePath, alphaPath)
            for sign in signs:
                if Filename(signTexturePath).exists():
                    sign.setTexture(signTexture, 1)
                if inDreamland:
                    sign.setColorScale(0.525, 0.525, 0.525, 1)

        return
    def replaceRandom(self, root, generator=random):
        for nodePath in root.findAllMatches('**/random_???_*'):
            name = nodePath.getName()

            category = name[11:]

            if name[7] in ('m', 't'):
                codeCount = self.cr.playGame.dnaStore.getNumCatalogCodes(
                    category)
                index = generator.randint(0, codeCount - 1)
                code = self.cr.playGame.dnaStore.getCatalogCode(
                    category, index)
                if name[7] == 'm':
                    _nodePath = self.cr.playGame.dnaStore.findNode(
                        code).copyTo(nodePath)
                    if name[8] == 'r':
                        self.replaceRandom(_nodePath, generator=generator)
                else:
                    texture = self.cr.playGame.dnaStore.findTexture(code)
                    nodePath.setTexture(texture, 100)
                    _nodePath = nodePath

            if name[8] == 'c':
                hoodId = ZoneUtil.getCanonicalHoodId(self.zoneId)
                colors = ToonInteriorColors.colors[hoodId]
                _nodePath.setColorScale(generator.choice(colors[category]))
Пример #15
0
    def showChoicePoster(self, questId, fromNpcId, toNpcId, rewardId, callback):
        self.update((questId,
         fromNpcId,
         toNpcId,
         rewardId,
         0))
        quest = Quests.getQuest(questId)
        self.rewardText.show()
        self.rewardText.setZ(-0.205)
        self.questProgress.hide()
        if not hasattr(self, 'chooseButton'):
            guiButton = loader.loadModel('phase_3/models/gui/quit_button')
            self.chooseButton = DirectButton(parent=self.questFrame, relief=None, image=(guiButton.find('**/QuitBtn_UP'), guiButton.find('**/QuitBtn_DN'), guiButton.find('**/QuitBtn_RLVR')), image_scale=(0.7, 1, 1), text=TTLocalizer.QuestPageChoose, text_scale=0.06, text_pos=(0, -0.02), pos=(0.285, 0, 0.245), scale=0.65)
            guiButton.removeNode()
        npcZone = NPCToons.getNPCZone(toNpcId)
        hoodId = ZoneUtil.getCanonicalHoodId(npcZone)
        if not base.cr.isPaid() and (questId == 401 or hasattr(quest, 'getLocation') and quest.getLocation() == 1000 or hoodId == 1000):

            def showTeaserPanel():
                TeaserPanel(pageName='getGags')

            self.chooseButton['command'] = showTeaserPanel
        else:
            self.chooseButton['command'] = callback
            self.chooseButton['extraArgs'] = [questId]
        self.unbind(DGG.WITHIN)
        self.unbind(DGG.WITHOUT)
        if not quest.getType() == Quests.TrackChoiceQuest:
            self.questInfo.setZ(-0.0625)
        return
 def setup(self):
     self.dnaStore = base.cr.playGame.dnaStore
     self.randomGenerator = random.Random()
     self.randomGenerator.seed(self.zoneId)
     self.interior = loader.loadModel("phase_4/models/modules/PetShopInterior")
     self.interior.reparentTo(render)
     self.fish = Actor.Actor(
         "phase_4/models/props/interiorfish-zero", {"swim": "phase_4/models/props/interiorfish-swim"}
     )
     self.fish.reparentTo(self.interior)
     self.fish.setColorScale(0.8, 0.9, 1, 0.8)
     self.fish.setScale(0.8)
     self.fish.setPos(0, 6, -4)
     self.fish.setPlayRate(0.7, "swim")
     self.fish.loop("swim")
     hoodId = ZoneUtil.getCanonicalHoodId(self.zoneId)
     self.colors = ToonInteriorColors.colors[hoodId]
     self.replaceRandomInModel(self.interior)
     door = self.chooseDoor()
     doorOrigin = render.find("**/door_origin;+s")
     doorNP = door.copyTo(doorOrigin)
     doorOrigin.setScale(0.8, 0.8, 0.8)
     doorOrigin.setPos(doorOrigin, 0, -0.25, 0)
     doorColor = self.randomGenerator.choice(self.colors["TI_door"])
     setupDoor(doorNP, self.interior, doorOrigin, self.dnaStore, str(self.block), doorColor)
     doorFrame = doorNP.find("door_*_flat")
     doorFrame.wrtReparentTo(self.interior)
     doorFrame.setColor(doorColor)
     del self.colors
     del self.dnaStore
     del self.randomGenerator
     self.interior.flattenMedium()
Пример #17
0
 def setup(self):
     self.dnaStore = base.cr.playGame.dnaStore
     self.randomGenerator = random.Random()
     self.randomGenerator.seed(self.zoneId)
     self.interior = loader.loadModel('phase_3.5/models/modules/toon_interior_tutorial')
     self.interior.reparentTo(render)
     dnaStore = DNAStorage()
     node = loader.loadDNAFile(self.cr.playGame.hood.dnaStore, 'phase_3.5/dna/tutorial_street.pdna')
     self.street = render.attachNewNode(node)
     self.street.flattenMedium()
     self.street.setPosHpr(-17, 42, -0.5, 180, 0, 0)
     self.street.find('**/tb2:toon_landmark_TT_A1_DNARoot').stash()
     self.street.find('**/tb1:toon_landmark_hqTT_DNARoot/**/door_flat_0').stash()
     self.street.findAllMatches('**/+CollisionNode').stash()
     self.skyFile = 'phase_3.5/models/props/TT_sky'
     self.sky = loader.loadModel(self.skyFile)
     self.sky.setScale(0.8)
     self.sky.reparentTo(render)
     self.sky.setDepthTest(0)
     self.sky.setDepthWrite(0)
     self.sky.setBin('background', 100)
     self.sky.find('**/Sky').reparentTo(self.sky, -1)
     hoodId = ZoneUtil.getCanonicalHoodId(self.zoneId)
     self.colors = ToonInteriorColors.colors[hoodId]
     self.replaceRandomInModel(self.interior)
     doorModelName = 'door_double_round_ul'
     if doorModelName[-1:] == 'r':
         doorModelName = doorModelName[:-1] + 'l'
     else:
         doorModelName = doorModelName[:-1] + 'r'
     door = self.dnaStore.findNode(doorModelName)
     door_origin = render.find('**/door_origin;+s')
     doorNP = door.copyTo(door_origin)
     door_origin.setScale(0.8, 0.8, 0.8)
     door_origin.setPos(door_origin, 0, -0.025, 0)
     color = self.randomGenerator.choice(self.colors['TI_door'])
     setupDoor(doorNP, self.interior, door_origin, self.dnaStore, str(self.block), color)
     doorFrame = doorNP.find('door_*_flat')
     doorFrame.wrtReparentTo(self.interior)
     doorFrame.setColor(color)
     del self.colors
     del self.dnaStore
     del self.randomGenerator
     self.interior.flattenMedium()
     npcOrigin = self.interior.find('**/npc_origin_' + `(self.cr.doId2do[self.npcId].posIndex)`)
     if not npcOrigin.isEmpty():
         self.cr.doId2do[self.npcId].reparentTo(npcOrigin)
         self.cr.doId2do[self.npcId].clearMat()
     self.createSuit()
     base.localAvatar.setPosHpr(-2, 12, 0, -10, 0, 0)
     self.cr.doId2do[self.npcId].setChatAbsolute(TTLocalizer.QuestScript101_0, CFSpeech)
     place = base.cr.playGame.getPlace()
     if place and hasattr(place, 'fsm') and place.fsm.getCurrentState().getName():
         self.notify.info('Tutorial movie: Place ready.')
         self.playMovie()
     else:
         self.notify.info('Tutorial movie: Waiting for place=%s, has fsm=%s' % (place, hasattr(place, 'fsm')))
         if hasattr(place, 'fsm'):
             self.notify.info('Tutorial movie: place state=%s' % place.fsm.getCurrentState().getName())
         self.acceptOnce('enterTutorialInterior', self.playMovie)
Пример #18
0
 def setup(self):
     self.dnaStore = base.cr.playGame.dnaStore
     self.randomGenerator = random.Random()
     self.randomGenerator.seed(self.zoneId)
     interior = self.randomDNAItem('TI_room', self.dnaStore.findNode)
     self.interior = interior.copyTo(render)
     hoodId = ZoneUtil.getCanonicalHoodId(self.zoneId)
     self.colors = ToonInteriorColors.colors[hoodId]
     self.replaceRandomInModel(self.interior)
     doorModelName = 'door_double_round_ul'
     if doorModelName[-1:] == 'r':
         doorModelName = doorModelName[:-1] + 'l'
     else:
         doorModelName = doorModelName[:-1] + 'r'
     door = self.dnaStore.findNode(doorModelName)
     door_origin = render.find('**/door_origin;+s')
     doorNP = door.copyTo(door_origin)
     door_origin.setScale(0.8, 0.8, 0.8)
     door_origin.setPos(door_origin, 0, -0.025, 0)
     color = self.randomGenerator.choice(self.colors['TI_door'])
     DNADoor.setupDoor(doorNP, self.interior, door_origin, self.dnaStore,
                       str(self.block), color)
     doorFrame = doorNP.find('door_*_flat')
     doorFrame.wrtReparentTo(self.interior)
     doorFrame.setColor(color)
     sign = hidden.find('**/tb%s:*_landmark_*_DNARoot/**/sign;+s' %
                        (self.block, ))
     if not sign.isEmpty():
         signOrigin = self.interior.find('**/sign_origin;+s')
         newSignNP = sign.copyTo(signOrigin)
         newSignNP.setDepthWrite(1, 1)
         mat = self.dnaStore.getSignTransformFromBlockNumber(int(
             self.block))
         inv = Mat4(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
         inv.invertFrom(mat)
         newSignNP.setMat(inv)
         newSignNP.flattenLight()
         ll = Point3()
         ur = Point3()
         newSignNP.calcTightBounds(ll, ur)
         width = ur[0] - ll[0]
         height = ur[2] - ll[2]
         if width != 0 and height != 0:
             xScale = (SIGN_RIGHT - SIGN_LEFT) / width
             zScale = (SIGN_TOP - SIGN_BOTTOM) / height
             scale = min(xScale, zScale)
             xCenter = (ur[0] + ll[0]) / 2.0
             zCenter = (ur[2] + ll[2]) / 2.0
             newSignNP.setPosHprScale(
                 (SIGN_RIGHT + SIGN_LEFT) / 2.0 - xCenter * scale, -0.1,
                 (SIGN_TOP + SIGN_BOTTOM) / 2.0 - zCenter * scale, 0.0, 0.0,
                 0.0, scale, scale, scale)
     trophyOrigin = self.interior.find('**/trophy_origin')
     trophy = self.buildTrophy()
     if trophy:
         trophy.reparentTo(trophyOrigin)
     del self.colors
     del self.dnaStore
     del self.randomGenerator
     self.interior.flattenMedium()
Пример #19
0
 def setup(self):
     self.dnaStore = base.cr.playGame.dnaStore
     self.randomGenerator = random.Random()
     self.randomGenerator.seed(self.zoneId)
     self.interior = loader.loadModel('phase_4/models/modules/PetShopInterior')
     self.interior.reparentTo(render)
     self.fish = Actor.Actor('phase_4/models/props/interiorfish-zero', {'swim': 'phase_4/models/props/interiorfish-swim'})
     self.fish.reparentTo(self.interior)
     self.fish.setColorScale(0.8, 0.9, 1, 0.8)
     self.fish.setScale(0.8)
     self.fish.setPos(0, 6, -4)
     self.fish.setPlayRate(0.7, 'swim')
     self.fish.loop('swim')
     hoodId = ZoneUtil.getCanonicalHoodId(self.zoneId)
     self.colors = ToonInteriorColors.colors[hoodId]
     self.replaceRandomInModel(self.interior)
     door = self.chooseDoor()
     doorOrigin = render.find('**/door_origin;+s')
     doorNP = door.copyTo(doorOrigin)
     doorOrigin.setScale(0.8, 0.8, 0.8)
     doorOrigin.setPos(doorOrigin, 0, -0.25, 0)
     doorColor = self.randomGenerator.choice(self.colors['TI_door'])
     setupDoor(doorNP, self.interior, doorOrigin, self.dnaStore, str(self.block), doorColor)
     doorFrame = doorNP.find('door_*_flat')
     doorFrame.wrtReparentTo(self.interior)
     doorFrame.setColor(doorColor)
     del self.colors
     del self.dnaStore
     del self.randomGenerator
     self.interior.flattenMedium()
     for npcToon in self.cr.doFindAllInstances(DistributedNPCToonBase):
         npcToon.initToonState()
Пример #20
0
    def joinGroup(self, group, shardId):
        canonicalHoodId = ZoneUtil.getCanonicalHoodId(group)
        shardName = base.cr.activeDistrictMap[shardId].name
        hoodName = TTLocalizer.GlobalStreetNames[canonicalHoodId]
        teleportAccess = base.localAvatar.hasTeleportAccess(canonicalHoodId)

        if teleportAccess:
            message = TTLocalizer.GroupAskAccess
        elif base.localAvatar.defaultShard == shardId:
            self.acceptOnce('groupDialogDone', self.cleanupGroupDialog)
            self.groupDialog = TTDialog.TTGlobalDialog(
                style=TTDialog.Acknowledge,
                text=TTLocalizer.GroupAskNoAccessSame %
                (hoodName[0], hoodName[-1]),
                doneEvent='groupDialogDone')
            self.groupDialog.show()
            return
        else:
            message = TTLocalizer.GroupAskNoAccess

        self.acceptOnce('groupDialogDone',
                        self.__handleGroupDialog,
                        extraArgs=[
                            canonicalHoodId if teleportAccess else
                            base.localAvatar.lastHood, shardId
                        ])
        self.groupDialog = TTDialog.TTGlobalDialog(
            style=TTDialog.TwoChoice,
            text=message % (hoodName[0], hoodName[-1], shardName),
            doneEvent='groupDialogDone')
        self.groupDialog.show()
Пример #21
0
def openToAll(zoneId, avatar):
    allowed = False
    canonicalZoneId = ZoneUtil.getCanonicalHoodId(zoneId)
    allowedZones = [ToontownGlobals.ToontownCentral,
     ToontownGlobals.MyEstate,
     ToontownGlobals.GoofySpeedway,
     ToontownGlobals.Tutorial]
    specialZones = [ToontownGlobals.SellbotLobby]
    if ToontownGlobals.SELLBOT_NERF_HOLIDAY in simbase.air.holidayManager.currentHolidays:
        specialZones.append(ToontownGlobals.SellbotHQ)
    ownerId = simbase.air.estateManager.getOwnerFromZone(zoneId)
    if ownerId:
        for zone in simbase.air.estateManager.getEstateZones(ownerId):
            specialZones.append(zone)

    if canonicalZoneId in allowedZones or avatar.isInEstate():
        allowed = True
    else:
        if zoneId in specialZones:
            allowed = True
        else:
            if canonicalZoneId >= ToontownGlobals.DynamicZonesBegin and not avatar.getTutorialAck():
                zoneDict = simbase.air.tutorialManager.playerDict.get(avatar.doId)
                if zoneDict:
                    allowed = True
    return allowed
Пример #22
0
    def choseShard(self, shardId):
        zoneId = self.getCurrentZoneId()
        canonicalHoodId = ZoneUtil.getCanonicalHoodId(base.localAvatar.lastHood)
        currentShardId = self.getCurrentShardId()
        if shardId == currentShardId:
            return None
        elif shardId == ToontownGlobals.WelcomeValleyToken:
            self.doneStatus = {
                'mode': 'teleport',
                'hood': ToontownGlobals.WelcomeValleyToken }
            messenger.send(self.doneEvent)
        elif shardId == base.localAvatar.defaultShard:
            self.doneStatus = {
                'mode': 'teleport',
                'hood': canonicalHoodId }
            messenger.send(self.doneEvent)
        else:
            
            try:
                place = base.cr.playGame.getPlace()
            except:
                
                try:
                    place = base.cr.playGame.hood.loader.place
                except:
                    place = base.cr.playGame.hood.place


            place.requestTeleport(canonicalHoodId, canonicalHoodId, shardId, -1)
Пример #23
0
 def avatarEnter(self):
     avId = self.air.getAvatarIdFromSender()
     if not avId in self.air.doId2do:
         self.notify.warning('Avatar: %s not found' % avId)
         return
     if self.isBusy():
         self.freeAvatar(avId)
         return
     self.petSeeds = self.air.petMgr.getAvailablePets(
         ZoneUtil.getCanonicalHoodId(self.zoneId))
     numGenders = len(PetDNA.PetGenders)
     self.petSeeds *= numGenders
     self.petSeeds.sort()
     self.sendUpdateToAvatarId(avId, 'setPetSeeds', [self.petSeeds])
     self.transactionType = ''
     av = self.air.doId2do[avId]
     self.busy = avId
     self.acceptOnce(self.air.getAvatarExitEvent(avId),
                     self.__handleUnexpectedExit,
                     extraArgs=[avId])
     flag = NPCToons.SELL_MOVIE_START
     self.d_setMovie(avId, flag)
     taskMgr.doMethodLater(PetConstants.PETCLERK_TIMER,
                           self.sendTimeoutMovie,
                           self.uniqueName('clearMovie'))
     DistributedNPCToonBaseAI.avatarEnter(self)
Пример #24
0
    def setup(self):
        self.dnaStore = base.cr.playGame.dnaStore
        self.randomGenerator = random.Random()
        self.randomGenerator.seed(self.zoneId)
        interior = self.randomDNAItem('TI_hall', self.dnaStore.findNode)
        self.interior = interior.copyTo(render)
        hoodId = ZoneUtil.getCanonicalHoodId(self.zoneId)
        self.colors = ToonInteriorColors.colors[hoodId]
        self.replaceRandomInModel(self.interior)
        doorModelName = 'door_double_round_ul'
        if doorModelName[-1:] == 'r':
            doorModelName = doorModelName[:-1] + 'l'
        else:
            doorModelName = doorModelName[:-1] + 'r'
        door = self.dnaStore.findNode(doorModelName)
        door_origin = render.find('**/door_origin;+s')
        doorNP = door.copyTo(door_origin)
        door_origin.setScale(0.8, 0.8, 0.8)
        door_origin.setPos(door_origin, 0, -0.025, 0)
        color = self.randomGenerator.choice(self.colors['TI_door'])
        setupDoor(doorNP, self.interior, door_origin, self.dnaStore,
                  str(self.block), color)
        doorFrame = doorNP.find('door_*_flat')
        doorFrame.wrtReparentTo(self.interior)
        doorFrame.setColor(color)
        del self.colors
        del self.dnaStore
        del self.randomGenerator
        self.interior.flattenMedium()
        for npcToon in self.cr.doFindAllInstances(
                DistributedNPCToonBase.DistributedNPCToonBase):
            npcToon.initToonState()

        self.createSillyMeter()
 def setup(self):
     self.dnaStore = base.cr.playGame.dnaStore
     self.randomGenerator = random.Random()
     self.randomGenerator.seed(self.zoneId)
     interior = self.randomDNAItem('TI_hall', self.dnaStore.findNode)
     self.interior = interior.copyTo(render)
     hoodId = ZoneUtil.getCanonicalHoodId(self.zoneId)
     self.colors = ToonInteriorColors.colors[hoodId]
     self.replaceRandomInModel(self.interior)
     doorModelName = 'door_double_round_ul'
     if doorModelName[-1:] == 'r':
         doorModelName = doorModelName[:-1] + 'l'
     else:
         doorModelName = doorModelName[:-1] + 'r'
     door = self.dnaStore.findNode(doorModelName)
     door_origin = render.find('**/door_origin;+s')
     doorNP = door.copyTo(door_origin)
     door_origin.setScale(0.8, 0.8, 0.8)
     door_origin.setPos(door_origin, 0, -0.025, 0)
     color = self.randomGenerator.choice(self.colors['TI_door'])
     DNADoor.setupDoor(doorNP, self.interior, door_origin, self.dnaStore, str(self.block), color)
     doorFrame = doorNP.find('door_*_flat')
     doorFrame.wrtReparentTo(self.interior)
     doorFrame.setColor(color)
     del self.colors
     del self.dnaStore
     del self.randomGenerator
     self.interior.flattenMedium()
     self.sillyFSM.enterInitialState()
     for npcToon in self.cr.doFindAllInstances(DistributedNPCToonBase):
         npcToon.initToonState()
Пример #26
0
 def updateMap(self):
     if self.av:
         
         try:
             hoodId = ZoneUtil.getCanonicalHoodId(self.av.getLocation()[1])
             zoneId = ZoneUtil.getCanonicalBranchZone(self.av.getLocation()[1])
             mapsGeom = loader.loadModel('phase_4/models/questmap/%s_maps' % ToontownGlobals.dnaMap[hoodId])
             mapImage = mapsGeom.find('**/%s_%s_english' % (ToontownGlobals.dnaMap[hoodId], zoneId))
             if not mapImage.isEmpty():
                 self.container['image'] = mapImage
                 self.resetFrameSize()
                 self.cornerPosInfo = QuestMapGlobals.CornerPosTable.get('%s_%s_english' % (ToontownGlobals.dnaMap[hoodId], zoneId))
                 self.hqPosInfo = QuestMapGlobals.HQPosTable.get('%s_%s_english' % (ToontownGlobals.dnaMap[hoodId], zoneId))
                 self.fishingSpotInfo = QuestMapGlobals.FishingSpotPosTable.get('%s_%s_english' % (ToontownGlobals.dnaMap[hoodId], zoneId))
                 self.cogInfoPos = QuestMapGlobals.CogInfoPosTable.get('%s_%s_english' % (ToontownGlobals.dnaMap[hoodId], zoneId))
                 self.cogInfoFrame.setPos(self.cogInfoPos)
                 self.hide()
                 self.hoodId = hoodId
                 self.zoneId = zoneId
                 self.updateQuestInfo()
                 self.updateCogInfo()
                 taskMgr.add(self.update, 'questMapUpdate')
             else:
                 self.stop()
             mapsGeom.removeNode()
         self.stop()
 def setup(self):
     self.dnaStore = base.cr.playGame.dnaStore
     self.randomGenerator = random.Random()
     self.randomGenerator.seed(self.zoneId)
     interior = self.randomDNAItem("TI_hall", self.dnaStore.findNode)
     self.interior = interior.copyTo(render)
     hoodId = ZoneUtil.getCanonicalHoodId(self.zoneId)
     self.colors = ToonInteriorColors.colors[hoodId]
     self.replaceRandomInModel(self.interior)
     doorModelName = "door_double_round_ul"
     if doorModelName[-1:] == "r":
         doorModelName = doorModelName[:-1] + "l"
     else:
         doorModelName = doorModelName[:-1] + "r"
     door = self.dnaStore.findNode(doorModelName)
     door_origin = render.find("**/door_origin;+s")
     doorNP = door.copyTo(door_origin)
     door_origin.setScale(0.8, 0.8, 0.8)
     door_origin.setPos(door_origin, 0, -0.025, 0)
     color = self.randomGenerator.choice(self.colors["TI_door"])
     DNADoor.setupDoor(doorNP, self.interior, door_origin, self.dnaStore, str(self.block), color)
     doorFrame = doorNP.find("door_*_flat")
     doorFrame.wrtReparentTo(self.interior)
     doorFrame.setColor(color)
     del self.colors
     del self.dnaStore
     del self.randomGenerator
     self.interior.flattenMedium()
     self.sillyFSM.enterInitialState()
 def setup(self):
     self.dnaStore = base.cr.playGame.dnaStore
     self.randomGenerator = random.Random()
     self.randomGenerator.seed(self.zoneId)
     self.interior = loader.loadModel(
         'phase_4/models/modules/gagShop_interior')
     self.interior.reparentTo(render)
     hoodId = ZoneUtil.getCanonicalHoodId(self.zoneId)
     self.colors = ToonInteriorColors.colors[hoodId]
     self.replaceRandomInModel(self.interior)
     door = self.chooseDoor()
     doorOrigin = render.find('**/door_origin;+s')
     doorNP = door.copyTo(doorOrigin)
     doorOrigin.setScale(0.8, 0.8, 0.8)
     doorOrigin.setPos(doorOrigin, 0, -0.025, 0)
     doorColor = self.randomGenerator.choice(self.colors['TI_door'])
     DNADoor.setupDoor(doorNP, self.interior, doorOrigin,
                       self.dnaStore, str(self.block), doorColor)
     doorFrame = doorNP.find('door_*_flat')
     doorFrame.wrtReparentTo(self.interior)
     doorFrame.setColor(doorColor)
     del self.colors
     del self.dnaStore
     del self.randomGenerator
     self.interior.flattenMedium()
Пример #29
0
    def replaceStreetSignTextures(self):
        if not hasattr(base.cr, "playGame"):
            return None

        place = base.cr.playGame.getPlace()
        if place is None:
            return None

        geom = base.cr.playGame.getPlace().loader.geom
        signs = geom.findAllMatches("**/*tunnelAheadSign*;+s")
        if signs.getNumPaths() > 0:
            streetSign = base.cr.streetSign
            signTexturePath = streetSign.StreetSignBaseDir + "/" + streetSign.StreetSignFileName
            loaderTexturePath = Filename(str(signTexturePath))
            alphaPath = "phase_4/maps/tt_t_ara_gen_tunnelAheadSign_a.rgb"
            inDreamland = False
            if place.zoneId and ZoneUtil.getCanonicalHoodId(place.zoneId) == ToontownGlobals.DonaldsDreamland:
                inDreamland = True

            alphaPath = "phase_4/maps/tt_t_ara_gen_tunnelAheadSign_a.rgb"
            if Filename(signTexturePath).exists():
                signTexture = loader.loadTexture(loaderTexturePath, alphaPath)

            for sign in signs:
                if Filename(signTexturePath).exists():
                    sign.setTexture(signTexture, 1)

                if inDreamland:
                    sign.setColorScale(0.52500000000000002, 0.52500000000000002, 0.52500000000000002, 1)
                    continue
Пример #30
0
    def updateQuestInfo(self):
        for marker in self.buildingMarkers:
            marker.destroy()

        self.buildingMarkers = []
        dnaData = base.cr.playGame.dnaData
        for questIndex in self.av.questPage.quests.keys():
            questDesc = self.av.questPage.quests.get(questIndex)
            if questDesc is None:
                continue
            mapIndex = questIndex + 1
            questId, fromNpcId, toNpcId, rewardId, toonProgress = questDesc
            quest = Quests.getQuest(questId)
            fComplete = quest.getCompletionStatus(self.av, questDesc) == Quests.COMPLETE
            if not fComplete:
                if quest.getType() == Quests.RecoverItemQuest:
                    if quest.getHolder() == Quests.AnyFish:
                        self.putBuildingMarker(self.fishingSpotInfo, mapIndex=mapIndex)
                    continue
                elif quest.getType() != Quests.DeliverGagQuest and quest.getType() != Quests.DeliverItemQuest and quest.getType() != Quests.VisitQuest and quest.getType() != Quests.TrackChoiceQuest:
                    continue
            if toNpcId == Quests.ToonHQ:
                self.putBuildingMarker(self.hqPosInfo, mapIndex=mapIndex)
            else:
                npcZone = NPCToons.getNPCZone(toNpcId)
                hoodId = ZoneUtil.getCanonicalHoodId(npcZone)
                branchId = ZoneUtil.getCanonicalBranchZone(npcZone)
                if self.hoodId == hoodId and self.zoneId == branchId:
                    for blockId, block in dnaData.getBlocks():
                        zone = block.zone
                        branchZone = zone - zone % 100
                        finalZone = branchZone + 500 + blockId
                        if npcZone == finalZone:
                            building = block.node
                            self.putBuildingMarker(Point3(building.getPos()), building.getHpr(), mapIndex=mapIndex)
Пример #31
0
 def setup(self):
     self.dnaStore = base.cr.playGame.dnaStore
     self.randomGenerator = random.Random()
     self.randomGenerator.seed(self.zoneId)
     self.interior = loader.loadModel(
         'phase_4/models/modules/gagShop_interior')
     self.interior.reparentTo(render)
     hoodId = ZoneUtil.getCanonicalHoodId(self.zoneId)
     self.colors = ToonInteriorColors.colors[hoodId]
     self.replaceRandomInModel(self.interior)
     door = self.chooseDoor()
     doorOrigin = render.find('**/door_origin;+s')
     doorNP = door.copyTo(doorOrigin)
     doorOrigin.setScale(0.8, 0.8, 0.8)
     doorOrigin.setPos(doorOrigin, 0, -0.025, 0)
     doorColor = self.randomGenerator.choice(self.colors['TI_door'])
     DNADoor.setupDoor(doorNP, self.interior, doorOrigin, self.dnaStore,
                       str(self.block), doorColor)
     doorFrame = doorNP.find('door_*_flat')
     doorFrame.wrtReparentTo(self.interior)
     doorFrame.setColor(doorColor)
     del self.colors
     del self.dnaStore
     del self.randomGenerator
     self.interior.flattenMedium()
Пример #32
0
    def enter(self, destHood):
        doneStatus = {}

        def letThrough(self=self, doneStatus=doneStatus):
            doneStatus['mode'] = 'pass'
            messenger.send(self.doneEvent, [doneStatus])

        if not base.restrictTrialers:
            letThrough()
            return
        if base.roamingTrialers:
            letThrough()
            return
        if base.cr.isPaid():
            letThrough()
            return
        if ZoneUtil.getCanonicalHoodId(destHood) in (
                ToontownGlobals.ToontownCentral, ToontownGlobals.MyEstate,
                ToontownGlobals.GoofySpeedway):
            letThrough()
            return
        else:
            try:
                base.localAvatar.b_setAnimState('neutral', 1)
            except:
                pass

        doneStatus['mode'] = 'fail'
        self.doneStatus = doneStatus
        self.dialog = TeaserPanel.TeaserPanel(pageName='otherHoods',
                                              doneFunc=self.handleOk)
Пример #33
0
 def updateMap(self):
     if self.av:
         hoodId = ZoneUtil.getCanonicalHoodId(self.av.getLocation()[1])
         zoneId = ZoneUtil.getCanonicalBranchZone(self.av.getLocation()[1])
         try:
             mapsGeom = loader.loadModel('phase_4/models/questmap/%s_maps' % ToontownGlobals.dnaMap[hoodId])
         except:
             self.stop()
             return
         mapImage = mapsGeom.find('**/%s_%s_english' % (ToontownGlobals.dnaMap[hoodId], zoneId))
         if not mapImage.isEmpty():
             self.container['image'] = mapImage
             self.resetFrameSize()
             self.cornerPosInfo = QuestMapGlobals.CornerPosTable.get('%s_%s_english' % (ToontownGlobals.dnaMap[hoodId], zoneId))
             self.hqPosInfo = QuestMapGlobals.HQPosTable.get('%s_%s_english' % (ToontownGlobals.dnaMap[hoodId], zoneId))
             self.fishingSpotInfo = QuestMapGlobals.FishingSpotPosTable.get('%s_%s_english' % (ToontownGlobals.dnaMap[hoodId], zoneId))
             self.cogInfoPos = QuestMapGlobals.CogInfoPosTable.get('%s_%s_english' % (ToontownGlobals.dnaMap[hoodId], zoneId))
             self.cogInfoFrame.setPos(self.cogInfoPos)
             self.hide()
             self.hoodId = hoodId
             self.zoneId = zoneId
             self.updateQuestInfo()
             self.updateCogInfo()
             taskMgr.add(self.update, 'questMapUpdate')
         else:
             self.stop()
             mapsGeom.removeNode()
 def calcHoodId(self, node):
     self.hoodId = ToontownGlobals.ToontownCentral
     fullString = str(node)
     splits = fullString.split('/')
     visId = int(splits[3])
     self.visId = visId
     self.hoodId = ZoneUtil.getCanonicalHoodId(visId)
     self.notify.debug('calcHoodId %d from %s' % (self.hoodId, fullString))
Пример #35
0
 def genDNAFileName(self, zoneId):
     zoneId = ZoneUtil.getCanonicalZoneId(zoneId)
     hoodId = ZoneUtil.getCanonicalHoodId(zoneId)
     hood = ToontownGlobals.dnaMap[hoodId]
     phase = ToontownGlobals.streetPhaseMap[hoodId]
     if hoodId == zoneId:
         zoneId = 'sz'
     return 'phase_%s/dna/%s_%s.pdna' % (phase, hood, zoneId)
Пример #36
0
 def genDNAFileName(self, zoneId):
     zoneId = ZoneUtil.getCanonicalZoneId(zoneId)
     hoodId = ZoneUtil.getCanonicalHoodId(zoneId)
     hood = ToontownGlobals.dnaMap[hoodId]
     phase = ToontownGlobals.streetPhaseMap[hoodId]
     if hoodId == zoneId:
         zoneId = 'sz'
     return 'phase_%s/dna/%s_%s.pdna' % (phase, hood, zoneId)
 def setup(self):
     self.dnaStore = base.cr.playGame.dnaStore
     self.randomGenerator = random.Random()
     self.randomGenerator.seed(self.zoneId)
     interior = self.randomDNAItem('TI_room', self.dnaStore.findNode)
     self.interior = interior.copyTo(render)
     hoodId = ZoneUtil.getCanonicalHoodId(self.zoneId)
     self.colors = ToonInteriorColors.colors[hoodId]
     self.replaceRandomInModel(self.interior)
     doorModelName = 'door_double_round_ul'
     if doorModelName[-1:] == 'r':
         doorModelName = doorModelName[:-1] + 'l'
     else:
         doorModelName = doorModelName[:-1] + 'r'
     door = self.dnaStore.findNode(doorModelName)
     door_origin = render.find('**/door_origin;+s')
     doorNP = door.copyTo(door_origin)
     door_origin.setScale(0.80000000000000004, 0.80000000000000004, 0.80000000000000004)
     door_origin.setPos(door_origin, 0, -0.025000000000000001, 0)
     color = self.randomGenerator.choice(self.colors['TI_door'])
     DNADoor.setupDoor(doorNP, self.interior, door_origin, self.dnaStore, str(self.block), color)
     doorFrame = doorNP.find('door_*_flat')
     doorFrame.wrtReparentTo(self.interior)
     doorFrame.setColor(color)
     sign = hidden.find('**/tb%s:*_landmark_*_DNARoot/**/sign;+s' % (self.block,))
     if not sign.isEmpty():
         signOrigin = self.interior.find('**/sign_origin;+s')
         newSignNP = sign.copyTo(signOrigin)
         newSignNP.setDepthWrite(1, 1)
         mat = self.dnaStore.getSignTransformFromBlockNumber(int(self.block))
         inv = Mat4(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
         inv.invertFrom(mat)
         newSignNP.setMat(inv)
         newSignNP.flattenLight()
         ll = Point3()
         ur = Point3()
         newSignNP.calcTightBounds(ll, ur)
         width = ur[0] - ll[0]
         height = ur[2] - ll[2]
         if width != 0 and height != 0:
             xScale = (SIGN_RIGHT - SIGN_LEFT) / width
             zScale = (SIGN_TOP - SIGN_BOTTOM) / height
             scale = min(xScale, zScale)
             xCenter = (ur[0] + ll[0]) / 2.0
             zCenter = (ur[2] + ll[2]) / 2.0
             newSignNP.setPosHprScale((SIGN_RIGHT + SIGN_LEFT) / 2.0 - xCenter * scale, -0.10000000000000001, (SIGN_TOP + SIGN_BOTTOM) / 2.0 - zCenter * scale, 0.0, 0.0, 0.0, scale, scale, scale)
         
     
     trophyOrigin = self.interior.find('**/trophy_origin')
     trophy = self.buildTrophy()
     if trophy:
         trophy.reparentTo(trophyOrigin)
     
     del self.colors
     del self.dnaStore
     del self.randomGenerator
     self.interior.flattenMedium()
 def lookupDNAFileName(self, zoneId):
     zoneId = ZoneUtil.getCanonicalZoneId(zoneId)
     hoodId = ZoneUtil.getCanonicalHoodId(zoneId)
     hood = ToontownGlobals.dnaMap[hoodId]
     if hoodId == zoneId:
         zoneId = 'sz'
         phaseNum = ToontownGlobals.phaseMap[hoodId]
     else:
         phaseNum = ToontownGlobals.streetPhaseMap[hoodId]
     return 'phase_%s/dna/%s_%s.pdna' % (phaseNum, hood, zoneId)
 def allowedToEnter(self):
     if base.cr.isPaid():
         return True
     place = base.cr.playGame.getPlace()
     myHoodId = ZoneUtil.getCanonicalHoodId(place.zoneId)
     if hasattr(place, 'id'):
         myHoodId = place.id
     if myHoodId in (ToontownGlobals.ToontownCentral, ToontownGlobals.MyEstate, ToontownGlobals.GoofySpeedway, ToontownGlobals.Tutorial):
         return True
     return False
	def calcHoodId(self, node):
		self.hoodId = ToontownGlobals.ToontownCentral
		fullString = str(node)
		splits = fullString.split('/')
		visId = int(splits[3])
		self.visId = visId
		self.hoodId = ZoneUtil.getCanonicalHoodId(visId)
		self.notify.debug(
			'calcHoodId %d from %s' %
			(self.hoodId, fullString))
Пример #41
0
 def allowedToEnter(self):
     if base.cr.isPaid():
         return True
     place = base.cr.playGame.getPlace()
     myHoodId = ZoneUtil.getCanonicalHoodId(place.zoneId)
     if hasattr(place, 'id'):
         myHoodId = place.id
     if myHoodId in (ToontownGlobals.ToontownCentral, ToontownGlobals.MyEstate, ToontownGlobals.GoofySpeedway, ToontownGlobals.Tutorial):
         return True
     return False
 def lookupDNAFileName(self, zoneId):
     zoneId = ZoneUtil.getCanonicalZoneId(zoneId)
     hoodId = ZoneUtil.getCanonicalHoodId(zoneId)
     hood = ToontownGlobals.dnaMap[hoodId]
     if hoodId == zoneId:
         zoneId = 'sz'
         phaseNum = ToontownGlobals.phaseMap[hoodId]
     else:
         phaseNum = ToontownGlobals.streetPhaseMap[hoodId]
     return 'phase_%s/dna/%s_%s.pdna' % (phaseNum, hood, zoneId)
Пример #43
0
    def setup(self):
        self.dnaStore = base.cr.playGame.dnaStore
        # Set up random generator
        self.randomGenerator = random.Random()
        self.randomGenerator.seed(self.zoneId)

        self.interior = loader.loadModel(
            'phase_4/models/modules/PetShopInterior')
        self.interior.reparentTo(render)

        # Fish swimming around behind the glass
        self.fish = Actor.Actor(
            'phase_4/models/props/interiorfish-zero', {
                'swim': 'phase_4/models/props/interiorfish-swim',
            })
        self.fish.reparentTo(self.interior)

        # Give them a little bluish green color to make it seem like they
        # are behind the glass. The 0.8 alpha makes their fins a little
        # translucent which is kinda cool.
        self.fish.setColorScale(0.8, 0.9, 1, 0.8)
        # Reposition them just a bit to bring them down and behind the glass
        self.fish.setScale(0.8)
        self.fish.setPos(0, 6, -4)
        # Slow it down a bit! Geez!
        self.fish.setPlayRate(0.7, 'swim')
        self.fish.loop('swim')

        # Load a color dictionary for this hood:
        hoodId = ZoneUtil.getCanonicalHoodId(self.zoneId)
        self.colors = ToonInteriorColors.colors[hoodId]
        # Replace all the "random_xxx_" nodes:
        self.replaceRandomInModel(self.interior)

        # Pick a door model
        door = self.chooseDoor()
        # Find the door origins
        doorOrigin = render.find("**/door_origin;+s")
        doorNP = door.copyTo(doorOrigin)
        assert (not doorNP.isEmpty())
        assert (not doorOrigin.isEmpty())
        doorOrigin.setScale(0.8, 0.8, 0.8)
        doorOrigin.setPos(doorOrigin, 0, -0.25, 0)
        doorColor = self.randomGenerator.choice(self.colors["TI_door"])
        DNADoor.setupDoor(doorNP, self.interior, doorOrigin, self.dnaStore,
                          str(self.block), doorColor)
        doorFrame = doorNP.find("door_*_flat")
        doorFrame.wrtReparentTo(self.interior)
        doorFrame.setColor(doorColor)

        del self.colors
        del self.dnaStore
        del self.randomGenerator
        self.interior.flattenMedium()
Пример #44
0
 def genDNAFileName(self):
     try:
         return simbase.air.genDNAFileName(self.getZoneId())
     except:
         zoneId = ZoneUtil.getCanonicalZoneId(self.getZoneId())
         hoodId = ZoneUtil.getCanonicalHoodId(zoneId)
         hood = ToontownGlobals.dnaMap[hoodId]
         phase = ToontownGlobals.streetPhaseMap[hoodId]
         if hoodId == zoneId:
             zoneId = 'sz'
         return 'phase_%s/dna/%s_%s.dna' % (phase, hood, zoneId)
Пример #45
0
 def genDNAFileName(self):
     try:
         return simbase.air.genDNAFileName(self.getZoneId())
     except:
         zoneId = ZoneUtil.getCanonicalZoneId(self.getZoneId())
         hoodId = ZoneUtil.getCanonicalHoodId(zoneId)
         hood = ToontownGlobals.dnaMap[hoodId]
         phase = ToontownGlobals.streetPhaseMap[hoodId]
         if hoodId == zoneId:
             zoneId = 'sz'
         return 'phase_%s/dna/%s_%s.dna' % (phase, hood, zoneId)
Пример #46
0
    def setup(self):
        self.dnaStore = base.cr.playGame.dnaStore

        self.randomGenerator = random.Random()
        self.randomGenerator.seed(self.zoneId)

        self.interior = loader.loadModel(
            'phase_4/models/modules/ttc_bank_interior.bam')
        self.interior.reparentTo(render)

        self.vaultOpenSfx = loader.loadSfx(
            'phase_4/audio/sfx/vault_door_open.ogg')
        self.vaultCloseSfx = loader.loadSfx(
            'phase_4/audio/sfx/vault_door_close.ogg')

        hoodId = ZoneUtil.getCanonicalHoodId(self.zoneId)
        self.colors = ToonInteriorColors.colors[hoodId]
        self.replaceRandomInModel(self.interior)

        door = self.chooseDoor()
        doorOrigin = render.find('**/door_origin;+s')
        doorNP = door.copyTo(doorOrigin)
        doorOrigin.setScale(0.8, 0.8, 0.8)
        doorOrigin.setPos(doorOrigin, 0, -0.025, 0)
        doorColor = self.randomGenerator.choice(self.colors['TI_door'])
        DNADoor.setupDoor(doorNP, self.interior, doorOrigin, self.dnaStore,
                          str(self.block), doorColor)
        doorFrame = doorNP.find('door_*_flat')
        doorFrame.wrtReparentTo(self.interior)
        doorFrame.setColor(doorColor)

        del self.colors
        del self.dnaStore
        del self.randomGenerator

        room = render.find('**/vault_walls')
        minPoint, maxPoint = room.getTightBounds()
        offset = 1  # We want a slight offset
        maxPoint -= offset
        collBox = CollisionBox(minPoint, maxPoint)
        collBox.setTangible(0)
        collNode = CollisionNode(self.uniqueName('vaultBox'))
        collNode.setIntoCollideMask(BitMask32(1))
        collNode.addSolid(collBox)
        self.collNodePath = render.attachNewNode(collNode)
        radius = ((maxPoint - minPoint) / 2).getZ()
        self.collNodePath.setPos(-11.2 + (offset / 2), 14 + radius + offset, 0)

        for npcToon in self.cr.doFindAllInstances(DistributedNPCToonBase):
            npcToon.initToonState()

        self.accept(self.uniqueName('entervaultBox'),
                    self.__handleEnterVaultBox)
        self.accept(self.uniqueName('exitvaultBox'), self.__handleExitVaultBox)
Пример #47
0
def canWearSuit(avatarId, zoneId):
    canonicalZoneId = ZoneUtil.getCanonicalHoodId(zoneId)
    allowedSuitZones = [ToontownGlobals.LawbotHQ,
     ToontownGlobals.CashbotHQ,
     ToontownGlobals.SellbotHQ,
     ToontownGlobals.BossbotHQ]
    if canonicalZoneId in allowedSuitZones:
        return True
    if zoneId >= ToontownGlobals.DynamicZonesBegin:
        return True
    return False
    def genDNAFileName(self, zoneId):
        canonicalZoneId = ZoneUtil.getCanonicalZoneId(zoneId)
        canonicalHoodId = ZoneUtil.getCanonicalHoodId(canonicalZoneId)
        hood = ToontownGlobals.dnaMap[canonicalHoodId]
        if canonicalHoodId == canonicalZoneId:
            canonicalZoneId = 'sz'
            phase = ToontownGlobals.phaseMap[canonicalHoodId]
        else:
            phase = ToontownGlobals.streetPhaseMap[canonicalHoodId]

        return 'phase_%s/dna/%s_%s.dna' % (phase, hood, canonicalZoneId)
Пример #49
0
    def requestTeleport(self, hood, shardId):
        canonicalHoodId = ZoneUtil.getCanonicalHoodId(hood)

        try:
            place = base.cr.playGame.getPlace()
        except:
            try:
                place = base.cr.playGame.hood.loader.place
            except:
                place = base.cr.playGame.hood.place

        place.requestTeleport(canonicalHoodId, canonicalHoodId, shardId, -1)
Пример #50
0
 def genDNAFileName(self, zoneId):
     zoneId = ZoneUtil.getCanonicalZoneId(zoneId)
     hoodId = ZoneUtil.getCanonicalHoodId(zoneId)
     hood = ToontownGlobals.dnaMap[hoodId]
     if hoodId == zoneId:
         zoneId = 'sz'
         phase = ToontownGlobals.phaseMap[hoodId]
     else:
         phase = ToontownGlobals.streetPhaseMap[hoodId]
     if 'outdoor_zone' in hood or 'golf_zone' in hood:
         phase = '6'
     return 'phase_%s/dna/%s_%s.dna' % (phase, hood, zoneId)
Пример #51
0
def canWearSuit(avatarId, zoneId):
    canonicalZoneId = ZoneUtil.getCanonicalHoodId(zoneId)
    allowedSuitZones = [ToontownGlobals.LawbotHQ,
     ToontownGlobals.CashbotHQ,
     ToontownGlobals.SellbotHQ,
     ToontownGlobals.BossbotHQ]
    if canonicalZoneId in allowedSuitZones:
        return True
    elif zoneId >= ToontownGlobals.DynamicZonesBegin:
        return True
    else:
        return False
 def calcHoodId(self, node):
     self.hoodId = ToontownGlobals.ToontownCentral
     fullString = str(node)
     splits = fullString.split('/')
     if len(splits) >= 5:
         visId = int(splits[4])
         self.visId = visId
         self.hoodId = ZoneUtil.getCanonicalHoodId(visId)
         self.notify.debug('calcHoodId %d from %s' % (self.hoodId, fullString))
     else:
         self.notify.warning("calcHoodId couldn't parse %s using 0" % fullString)
         self.hoodId = 0
         self.visId = 0
 def genDNAFileName(self):
     zoneId = ZoneUtil.getCanonicalZoneId(self.getZoneId())
     hoodId = ZoneUtil.getCanonicalHoodId(zoneId)
     hood = ToontownGlobals.dnaMap.get(hoodId)
     phase = ToontownGlobals.streetPhaseMap.get(hoodId, 4)
     if zoneId == 2000:
         phase = 4
     if hoodId == zoneId:
         zoneId = 'sz'
     if not hood:
         hood = 'toontown_central'
         zoneId = 'sz'
     return 'phase_%s/dna/%s_%s.pdna' % (phase, hood, zoneId)
Пример #54
0
    def calcHoodId(self, node):
        self.hoodId = ToontownGlobals.ToontownCentral
        fullString = str(node)
        splits = fullString.split('/')

        # Check if normal object or animated, if everything fails set the hoodId and visId to 0
        try:
            if type(splits[2]) == int:
                visId = int(splits[2])
                self.visId = visId
                self.hoodId = ZoneUtil.getCanonicalHoodId(visId)
                self.notify.debug('calcHoodId %d from %s' % (self.hoodId, fullString))
            else:
                # Probably an animated prop...
                visId = int(splits[4])
                self.visId = visId
                self.hoodId = ZoneUtil.getCanonicalHoodId(visId)
        except Exception, generic:
            if 'Editor' not in fullString:
                self.notify.warning("calcHoodId couldn't parse %s using 0" % fullString)
            self.hoodId = 0
            self.visId = 0
Пример #55
0
 def calcHoodId(self, node):
     self.hoodId = ToontownGlobals.ToontownCentral
     fullString = str(node)
     splits = fullString.split('/')
     try:
         visId = int(splits[2])
         self.visId = visId
         self.hoodId = ZoneUtil.getCanonicalHoodId(visId)
         self.notify.debug('calcHoodId %d from %s' % (self.hoodId, fullString))
     except Exception as generic:
         if 'Editor' not in fullString:
             self.notify.warning("calcHoodId couldn't parse %s using 0" % fullString)
         self.hoodId = 0
         self.visId = 0
Пример #56
0
 def teleportToShop(self, npcId):
     npcZone = NPCToons.getNPCZone(npcId)
     npcHood = ZoneUtil.getCanonicalHoodId(npcZone)
     avZone = base.localAvatar.getZoneId()
     avHood = ZoneUtil.getCanonicalHoodId(avZone)
     avShard = base.localAvatar.defaultShard
     avPlace = base.cr.playGame.getPlace()
     hqZone = {2000:2520, 1000:1507, 3000:3508, 4000:4504, 5000:5502, 7000:7503, 9000:9505}
     def callback(flag):
         if flag:
             npcZone = None
     base.cr.buildingQueryMgr.d_isSuit(npcZone, callback)
     if avShard not in base.cr.activeDistrictMap:
         return
     if npcZone in [-1, 0, None]:
         return
     if not ZoneUtil.isInterior(npcZone):
         return
     if ZoneUtil.isHQ(npcZone):
         args = (avHood, hqZone[avHood], avShard, -1)
     else:
         args = (npcHood, npcZone, avShard, -1)
     avPlace.requestTeleport(*args)