def knockKnockTrack(self, avatar, duration):
     if avatar == None:
         return
     self.rimshot = base.loadSfx('phase_5/audio/sfx/AA_heal_telljoke.ogg')
     self.knockSfx = base.loadSfx('phase_5/audio/sfx/GUI_knock_3.ogg')
     joke = KnockKnockJokes[self.propId % len(KnockKnockJokes)]
     place = base.cr.playGame.getPlace()
     doorName = TTLocalizer.DoorNametag
     if place:
         zone = place.getZoneId()
         branch = ZoneUtil.getBranchZone(zone)
     self.nametag = None
     self.nametagNP = None
     doorNP = render.find('**/KnockKnockDoorSphere_' + str(self.propId) + ';+s')
     if doorNP.isEmpty():
         self.notify.warning('Could not find KnockKnockDoorSphere_%s' % self.propId)
         return
     self.nametag = NametagGroup()
     self.nametag.setAvatar(doorNP)
     self.nametag.setFont(ToontownGlobals.getToonFont())
     self.nametag.setName(doorName)
     self.nametag.setActive(0)
     self.nametag.manage(base.marginManager)
     self.nametag.getNametag3d().setBillboardOffset(4)
     nametagNode = self.nametag.getNametag3d()
     self.nametagNP = render.attachNewNode(nametagNode)
     self.nametagNP.setName('knockKnockDoor_nt_' + str(self.propId))
     pos = doorNP.node().getSolid(0).getCenter()
     self.nametagNP.setPos(pos + Vec3(0, 0, avatar.getHeight() + 2))
     d = duration * 0.125
     track = Sequence(Parallel(Sequence(Wait(d * 0.5), SoundInterval(self.knockSfx)), Func(self.nametag.setChat, TTLocalizer.DoorKnockKnock, CFSpeech), Wait(d)), Func(avatar.setChatAbsolute, TTLocalizer.DoorWhosThere, CFSpeech | CFTimeout, openEnded=0), Wait(d), Func(self.nametag.setChat, joke[0], CFSpeech), Wait(d), Func(avatar.setChatAbsolute, joke[0] + TTLocalizer.DoorWhoAppendix, CFSpeech | CFTimeout, openEnded=0), Wait(d), Func(self.nametag.setChat, joke[1], CFSpeech), Parallel(SoundInterval(self.rimshot, startTime=2.0), Wait(d * 4)), Func(self.cleanupTrack))
     track.delayDelete = DelayDelete.DelayDelete(avatar, 'knockKnockTrack')
     return track
示例#2
0
    def enter(self, requestStatus, visibilityFlag = 1, arrowsOn = 1):
        teleportDebug(requestStatus, 'Street.enter(%s)' % (requestStatus,))
        self._ttfToken = None
        self.fsm.enterInitialState()
        base.playMusic(self.loader.music, looping=1, volume=0.8)
        self.loader.geom.reparentTo(render)
        if visibilityFlag:
            self.visibilityOn()
        base.localAvatar.setGeom(self.loader.geom)
        base.localAvatar.setOnLevelGround(1)
        self._telemLimiter = TLGatherAllAvs('Street', RotationLimitToH)
        NametagGlobals.setMasterArrowsOn(arrowsOn)
        self.zone = ZoneUtil.getBranchZone(requestStatus['zoneId'])

        def __lightDecorationOn__():
            geom = base.cr.playGame.getPlace().loader.geom
            self.halloweenLights = geom.findAllMatches('**/*light*')
            self.halloweenLights += geom.findAllMatches('**/*lamp*')
            self.halloweenLights += geom.findAllMatches('**/prop_snow_tree*')
            for light in self.halloweenLights:
                light.setColorScaleOff(1)

        if base.cr.newsManager.isHolidayRunning(ToontownGlobals.HALLOWEEN) and self.loader.hood.spookySkyFile:
            lightsOff = Sequence(LerpColorScaleInterval(base.cr.playGame.hood.loader.geom, 0.1, Vec4(0.55, 0.55, 0.65, 1)), Func(self.loader.hood.startSpookySky))
            lightsOff.start()
        else:
            self.loader.hood.startSky()
            lightsOn = LerpColorScaleInterval(base.cr.playGame.hood.loader.geom, 0.1, Vec4(1, 1, 1, 1))
            lightsOn.start()
        self.accept('doorDoneEvent', self.handleDoorDoneEvent)
        self.accept('DistributedDoor_doorTrigger', self.handleDoorTrigger)
        self.enterZone(requestStatus['zoneId'])
        self.tunnelOriginList = base.cr.hoodMgr.addLinkTunnelHooks(self, self.loader.nodeList)
        self.fsm.request(requestStatus['how'], [requestStatus])
def spawn(air, zone, element, match):
    if zone % 1000 != 0:
        # This should hopefully create the Fishermen NPCs on streets.
        NPCToons.createNpcsInZone(air, zone)
    pond = DistributedFishingPondAI(air)
    area = ZoneUtil.getBranchZone(zone)
    pond.setArea(area)
    pond.generateWithRequired(zone)
    bingoMgr = DistributedPondBingoManagerAI(air)
    bingoMgr.setPondDoId(pond.getDoId())
    bingoMgr.generateWithRequired(zone)
    pond.bingoMgr = bingoMgr
    pond.bingoMgr.createGame()
    simbase.air.fishManager.ponds[zone] = pond
    
    for i in range(FishingTargetGlobals.getNumTargets(area)):
                target = DistributedFishingTargetAI(simbase.air)
                target.setPondDoId(pond.getDoId())
                target.generateWithRequired(zone)
    for child in element.children:
        if isinstance(child, DNAProp) and 'fishing_spot' in child.code:
            spot = DistributedFishingSpotAI(air)
            spot.setPondDoId(pond.getDoId())
            x, y, z = child.getPos()
            h, p, r = child.getHpr()
            spot.setPosHpr(x, y, z, h, p, r)
            spot.generateWithRequired(zone)
    def enter(self, requestStatus):
        CogHQExterior.CogHQExterior.enter(self, requestStatus)

        for train in self.trains:
            train.show()

        # Load the CogHQ DNA file:
        dnaStore = DNAStorage()
        dnaFileName = self.genDNAFileName(self.zoneId)
        loadDNAFileAI(dnaStore, dnaFileName)

        # Collect all of the vis group zone IDs:
        self.zoneVisDict = {}
        for i in xrange(dnaStore.getNumDNAVisGroupsAI()):
            groupFullName = dnaStore.getDNAVisGroupName(i)
            visGroup = dnaStore.getDNAVisGroupAI(i)
            visZoneId = int(base.cr.hoodMgr.extractGroupName(groupFullName))
            visZoneId = ZoneUtil.getTrueZoneId(visZoneId, self.zoneId)
            visibles = []
            for i in xrange(visGroup.getNumVisibles()):
                visibles.append(int(visGroup.getVisible(i)))
            visibles.append(ZoneUtil.getBranchZone(visZoneId))
            self.zoneVisDict[visZoneId] = visibles

        # Next, we want interest in all vis groups due to this being a Cog HQ:
        base.cr.sendSetZoneMsg(self.zoneId, self.zoneVisDict.values()[0])
    def recoverItems(self, av, suitsKilled, taskZoneId):
        # Get the avatars current quests.
        avQuests = av.getQuests()
        questList = []
        recoveredItems = []
        unrecoveredItems = []
        taskZoneId = ZoneUtil.getBranchZone(taskZoneId)

        # Iterate through the avatars current quests.
        for i in xrange(0, len(avQuests), 5):
            questDesc = avQuests[i : i + 5]
            questClass = Quests.getQuest(questDesc[QuestIdIndex])
            if questClass.getCompletionStatus(av, questDesc) == Quests.INCOMPLETE:
                if isinstance(questClass, Quests.CogQuest):
                    for suit in suitsKilled:
                        if questClass.doesCogCount(av.doId, suit, taskZoneId, suit['activeToons']):
                            questDesc[QuestProgressIndex] += 1
                elif isinstance(questClass, Quests.RecoverItemQuest):
                    if questClass.getHolder() != Quests.AnyFish:
                        for suit in suitsKilled:
                            if questClass.doesCogCount(av.doId, suit, taskZoneId, suit['activeToons']):
                                baseChance = questClass.getPercentChance()
                                amountRemaining = questClass.getNumItems() - questDesc[QuestProgressIndex]
                                chance = Quests.calcRecoverChance(amountRemaining, baseChance)
                                if chance >= baseChance:
                                    questDesc[QuestProgressIndex] += 1
                                    recoveredItems.append(questClass.getItem())
                                else:
                                    unrecoveredItems.append(questClass.getItem())
            questList.append(questDesc)

        av.b_setQuests(questList)
        return (recoveredItems, unrecoveredItems)
 def recoverItems(self, toon, suitsKilled, taskZoneId):
     flattenedQuests = toon.getQuests()
     questList = [] #unflattened
     recoveredItems = []
     unrecoveredItems = []
     taskZoneId = ZoneUtil.getBranchZone(taskZoneId)
     for i in xrange(0, len(flattenedQuests), 5):
         questDesc = flattenedQuests[i : i + 5]
         questClass = Quests.getQuest(questDesc[0])
         if questClass.getCompletionStatus(toon, questDesc) == Quests.INCOMPLETE:
             if isinstance(questClass, Quests.CogQuest):
                 for suit in suitsKilled:
                     if questClass.doesCogCount(toon.doId, suit, taskZoneId, suit['activeToons']):
                         questDesc[4] += 1
             elif isinstance(questClass, Quests.RecoverItemQuest):
                 if questClass.getHolder() != Quests.AnyFish:
                     for suit in suitsKilled:
                         if questClass.doesCogCount(toon.doId, suit, taskZoneId, suit['activeToons']):
                             minchance = questClass.getPercentChance()
                             import random
                             chance = random.randint(minchance - 40, 100)
                             if chance <= minchance:
                                 questDesc[4] += 1
                                 recoveredItems.append(questClass.getItem())
                             else:
                                 unrecoveredItems.append(questClass.getItem())
         questList.append(questDesc)
     toon.b_setQuests(questList)
     return (recoveredItems, unrecoveredItems)
 def begin(self, range, label, gui, tipCategory, zoneId):
     self.waitBar['range'] = range
     self.title['text'] = label
     loadingScreenTex = self.zone2picture.get(ZoneUtil.getBranchZone(zoneId), self.defaultTex)
     self.background = loader.loadTexture(loadingScreenTex)
     self.__count = 0
     self.__expectedCount = range
     if gui:
         if base.localAvatarStyle:
             from toontown.toon import Toon
             self.toon = Toon.Toon()
             self.toon.setDNA(base.localAvatarStyle)
             self.toon.loop('bored', fromFrame=135, toFrame=135)
             self.toon.getGeomNode().setDepthWrite(1)
             self.toon.getGeomNode().setDepthTest(1)
             self.toon.setHpr(205, 0, 0)
             self.toon.setScale(0.18)
             self.toon.setPos(base.a2dBottomRight.getX()/1.25, 0, -0.034)
             self.toon.reparentTo(self.waitBar)
             self.waitBar['frameSize'] = (base.a2dLeft+(base.a2dRight/8.15), base.a2dRight-(base.a2dRight/2.57), -0.03, 0.03)
         self.title.reparentTo(base.a2dpBottomLeft, LOADING_SCREEN_SORT_INDEX)
         self.title.setPos(0.24, 0, 0.23)
         self.gui.setPos(0, -0.1, 0)
         self.gui.reparentTo(aspect2d, LOADING_SCREEN_SORT_INDEX)
         self.gui.setTexture(self.background, 1)
         if loadingScreenTex == self.defaultTex:
             self.logo.reparentTo(base.a2dpTopCenter, LOADING_SCREEN_SORT_INDEX)
     else:
         self.title.reparentTo(base.a2dpBottomLeft, LOADING_SCREEN_SORT_INDEX)
         self.gui.reparentTo(hidden)
         self.logo.reparentTo(hidden)
     self.waitBar.reparentTo(base.a2dpBottomCenter, LOADING_SCREEN_SORT_INDEX)
     self.waitBar.update(self.__count)
示例#8
0
 def handleToonInteriorDone(self):
     status = self.place.doneStatus
     if ZoneUtil.getBranchZone(status['zoneId']) == self.hood.hoodId and status['shardId'] == None:
         self.fsm.request('quietZone', [status])
     else:
         self.doneStatus = status
         messenger.send(self.doneEvent)
     return
 def streetDone(self):
     self.requestStatus = self.place.doneStatus
     status = self.place.doneStatus
     if status['loader'] == 'townLoader' and ZoneUtil.getBranchZone(status['zoneId']) == self.branchZone and status['shardId'] == None:
         self.fsm.request('quietZone', [status])
     else:
         self.doneStatus = status
         messenger.send(self.doneEvent)
     return
 def handlePlaygroundDone(self):
     status = self.place.doneStatus
     if self.enteringARace(status) and status.get('shardId') == None:
         zoneId = status['zoneId']
         self.fsm.request('quietZone', [status])
     elif ZoneUtil.getBranchZone(status['zoneId']) == self.hood.hoodId and status['shardId'] == None:
         self.fsm.request('quietZone', [status])
     else:
         self.doneStatus = status
         messenger.send(self.doneEvent)
示例#11
0
    def makeDictionaries(self, dnaStore):
        self.nodeDict = {}
        self.zoneDict = {}
        self.zoneVisDict = {}
        self.nodeList = []
        self.fadeInDict = {}
        self.fadeOutDict = {}
        a1 = Vec4(1, 1, 1, 1)
        a0 = Vec4(1, 1, 1, 0)
        numVisGroups = dnaStore.getNumDNAVisGroupsAI()
        for i in xrange(numVisGroups):
            groupFullName = dnaStore.getDNAVisGroupName(i)
            visGroup = dnaStore.getDNAVisGroupAI(i)
            groupName = base.cr.hoodMgr.extractGroupName(groupFullName)
            zoneId = int(groupName)
            zoneId = ZoneUtil.getTrueZoneId(zoneId, self.zoneId)
            groupNode = self.geom.find('**/' + groupFullName)
            if groupNode.isEmpty():
                self.notify.error('Could not find visgroup')
            else:
                if ':' in groupName:
                    groupName = '%s%s' % (zoneId, groupName[groupName.index(':'):])
                else:
                    groupName = '%s' % zoneId
                groupNode.setName(groupName)
            groupNode.flattenMedium()
            self.nodeDict[zoneId] = []
            self.nodeList.append(groupNode)
            self.zoneDict[zoneId] = groupNode
            visibles = []
            for i in xrange(visGroup.getNumVisibles()):
                visibles.append(int(visGroup.visibles[i]))
            visibles.append(ZoneUtil.getBranchZone(zoneId))
            self.zoneVisDict[zoneId] = visibles
            fadeDuration = 0.5
            self.fadeOutDict[groupNode] = Sequence(Func(groupNode.setTransparency, 1), LerpColorScaleInterval(groupNode, fadeDuration, a0, startColorScale=a1), Func(groupNode.clearColorScale), Func(groupNode.clearTransparency), Func(groupNode.stash), name='fadeZone-' + str(zoneId), autoPause=1)
            self.fadeInDict[groupNode] = Sequence(Func(groupNode.unstash), Func(groupNode.setTransparency, 1), LerpColorScaleInterval(groupNode, fadeDuration, a1, startColorScale=a0), Func(groupNode.clearColorScale), Func(groupNode.clearTransparency), name='fadeZone-' + str(zoneId), autoPause=1)

        for i in xrange(numVisGroups):
            groupFullName = dnaStore.getDNAVisGroupName(i)
            zoneId = int(base.cr.hoodMgr.extractGroupName(groupFullName))
            zoneId = ZoneUtil.getTrueZoneId(zoneId, self.zoneId)
            for j in xrange(dnaStore.getNumVisiblesInDNAVisGroup(i)):
                visName = dnaStore.getVisibleName(i, j)
                groupName = base.cr.hoodMgr.extractGroupName(visName)
                nextZoneId = int(groupName)
                nextZoneId = ZoneUtil.getTrueZoneId(nextZoneId, self.zoneId)
                visNode = self.zoneDict[nextZoneId]
                self.nodeDict[zoneId].append(visNode)

        self.hood.dnaStore.resetPlaceNodes()
        self.hood.dnaStore.resetDNAGroups()
        self.hood.dnaStore.resetDNAVisGroups()
        self.hood.dnaStore.resetDNAVisGroupsAI()
示例#12
0
 def streetDone(self):
     self.requestStatus = self.place.doneStatus
     status = self.place.doneStatus
     if status['loader'] == 'townLoader' and ZoneUtil.getBranchZone(
             status['zoneId']
     ) == self.branchZone and status['shardId'] == None:
         self.fsm.request('quietZone', [status])
     else:
         self.doneStatus = status
         messenger.send(self.doneEvent)
     return
 def load(self, zoneId):
     self.zoneId = zoneId
     self.parentFSMState.addChild(self.fsm)
     self.loadBattleAnims()
     self.branchZone = ZoneUtil.getBranchZone(zoneId)
     self.canonicalBranchZone = ZoneUtil.getCanonicalBranchZone(zoneId)
     self.music = base.loadMusic(self.musicFile)
     self.activityMusic = base.loadMusic(self.activityMusicFile)
     self.battleMusic = base.loadMusic('phase_3.5/audio/bgm/encntr_general_bg.ogg')
     self.townBattle = TownBattle.TownBattle(self.townBattleDoneEvent)
     self.townBattle.load()
示例#14
0
 def handlePlaygroundDone(self):
     status = self.place.doneStatus
     teleportDebug(status, "handlePlaygroundDone, doneStatus=%s" % (status,))
     if ZoneUtil.getBranchZone(status["zoneId"]) == self.hood.hoodId and status["shardId"] == None:
         teleportDebug(status, "same branch")
         self.fsm.request("quietZone", [status])
     else:
         self.doneStatus = status
         teleportDebug(status, "different hood")
         messenger.send(self.doneEvent)
     return
示例#15
0
 def handlePlaygroundDone(self):
     status = self.place.doneStatus
     teleportDebug(status, 'handlePlaygroundDone, doneStatus=%s' % (status,))
     if ZoneUtil.getBranchZone(status['zoneId']) == self.hood.hoodId and status['shardId'] == None:
         teleportDebug(status, 'same branch')
         self.fsm.request('quietZone', [status])
     else:
         self.doneStatus = status
         teleportDebug(status, 'different hood')
         messenger.send(self.doneEvent)
     return
    def makeDictionaries(self, dnaStore):
        self.nodeDict = {}
        self.zoneDict = {}
        self.zoneVisDict = {}
        self.nodeList = []
        self.fadeInDict = {}
        self.fadeOutDict = {}
        a1 = Vec4(1, 1, 1, 1)
        a0 = Vec4(1, 1, 1, 0)
        numVisGroups = dnaStore.getNumDNAVisGroupsAI()
        for i in xrange(numVisGroups):
            groupFullName = dnaStore.getDNAVisGroupName(i)
            visGroup = dnaStore.getDNAVisGroupAI(i)
            groupName = base.cr.hoodMgr.extractGroupName(groupFullName)
            zoneId = int(groupName)
            zoneId = ZoneUtil.getTrueZoneId(zoneId, self.zoneId)
            groupNode = self.geom.find('**/' + groupFullName)
            if groupNode.isEmpty():
                self.notify.error('Could not find visgroup')
            else:
                if ':' in groupName:
                    groupName = '%s%s' % (zoneId, groupName[groupName.index(':'):])
                else:
                    groupName = '%s' % zoneId
                groupNode.setName(groupName)
            groupNode.flattenMedium()
            self.nodeDict[zoneId] = []
            self.nodeList.append(groupNode)
            self.zoneDict[zoneId] = groupNode
            visibles = []
            for i in xrange(visGroup.getNumVisibles()):
                visibles.append(int(visGroup.visibles[i]))
            visibles.append(ZoneUtil.getBranchZone(zoneId))
            self.zoneVisDict[zoneId] = visibles
            fadeDuration = 0.5
            self.fadeOutDict[groupNode] = Sequence(Func(groupNode.setTransparency, 1), LerpColorScaleInterval(groupNode, fadeDuration, a0, startColorScale=a1), Func(groupNode.clearColorScale), Func(groupNode.clearTransparency), Func(groupNode.stash), name='fadeZone-' + str(zoneId), autoPause=1)
            self.fadeInDict[groupNode] = Sequence(Func(groupNode.unstash), Func(groupNode.setTransparency, 1), LerpColorScaleInterval(groupNode, fadeDuration, a1, startColorScale=a0), Func(groupNode.clearColorScale), Func(groupNode.clearTransparency), name='fadeZone-' + str(zoneId), autoPause=1)

        for i in xrange(numVisGroups):
            groupFullName = dnaStore.getDNAVisGroupName(i)
            zoneId = int(base.cr.hoodMgr.extractGroupName(groupFullName))
            zoneId = ZoneUtil.getTrueZoneId(zoneId, self.zoneId)
            for j in xrange(dnaStore.getNumVisiblesInDNAVisGroup(i)):
                visName = dnaStore.getVisibleName(i, j)
                groupName = base.cr.hoodMgr.extractGroupName(visName)
                nextZoneId = int(groupName)
                nextZoneId = ZoneUtil.getTrueZoneId(nextZoneId, self.zoneId)
                visNode = self.zoneDict[nextZoneId]
                self.nodeDict[zoneId].append(visNode)

        self.hood.dnaStore.resetPlaceNodes()
        self.hood.dnaStore.resetDNAGroups()
        self.hood.dnaStore.resetDNAVisGroups()
        self.hood.dnaStore.resetDNAVisGroupsAI()
 def handlePlaygroundDone(self):
     status = self.place.doneStatus
     if self.enteringAGolfCourse(status) and status.get("shardId") == None:
         zoneId = status["zoneId"]
         self.fsm.request("quietZone", [status])
     elif ZoneUtil.getBranchZone(status["zoneId"]) == self.hood.hoodId and status["shardId"] == None:
         self.fsm.request("quietZone", [status])
     else:
         self.doneStatus = status
         messenger.send(self.doneEvent)
     return
 def load(self, zoneId):
     self.zoneId = zoneId
     self.parentFSMState.addChild(self.fsm)
     self.loadBattleAnims()
     self.branchZone = ZoneUtil.getBranchZone(zoneId)
     self.canonicalBranchZone = ZoneUtil.getCanonicalBranchZone(zoneId)
     self.music = base.loadMusic(self.musicFile)
     self.activityMusic = base.loadMusic(self.activityMusicFile)
     self.battleMusic = base.loadMusic(self.zone2music.get(ZoneUtil.getHoodId(zoneId), 'phase_9/audio/bgm/encntr_suit_ttc.ogg'))#'phase_3.5/audio/bgm/encntr_general_bg.ogg'))
     self.townBattle = TownBattle.TownBattle(self.townBattleDoneEvent)
     self.townBattle.load()
示例#19
0
 def handlePlaygroundDone(self):
     status = self.place.doneStatus
     if self.enteringAGolfCourse(status) and status.get('shardId') == None:
         zoneId = status['zoneId']
         self.fsm.request('quietZone', [status])
     elif ZoneUtil.getBranchZone(status['zoneId']) == self.hood.hoodId and status['shardId'] == None:
         self.fsm.request('quietZone', [status])
     else:
         self.doneStatus = status
         messenger.send(self.doneEvent)
     return
示例#20
0
 def handlePlaygroundDone(self):
     status = self.place.doneStatus
     teleportDebug(status, 'handlePlaygroundDone, doneStatus=%s' % (status,))
     if ZoneUtil.getBranchZone(status['zoneId']) == self.hood.hoodId and status['shardId'] == None:
         teleportDebug(status, 'same branch')
         self.fsm.request('quietZone', [status])
     else:
         self.doneStatus = status
         teleportDebug(status, 'different hood')
         messenger.send(self.doneEvent)
     return
    def recoverItems(self, av, suitsKilled, taskZoneId):
        # Get the avatars current quests.
        avQuests = av.getQuests()
        questList = []
        recoveredItems = []
        unrecoveredItems = []
        taskZoneId = ZoneUtil.getBranchZone(taskZoneId)

        # Iterate through the avatars current quests.
        for i in xrange(0, len(avQuests), 5):
            questDesc = avQuests[i : i + 5]
            questClass = Quests.getQuest(questDesc[QuestIdIndex])

            # Check if the Quest isnt already complete
            if questClass.getCompletionStatus(av, questDesc) == Quests.INCOMPLETE:

                # Check if we are dealing with a RecoverItemQuest
                if isinstance(questClass, Quests.RecoverItemQuest):

                    # Iterate through all the Cogs that were killed in the battle
                    for suit in suitsKilled:

                        # Because the RecoveItemQuest class doesn't have a
                        # function to see if a Cog counts. We need to manually
                        # check if the Cog is valid for the Quest
                        if (questClass.getHolder() == Quests.Any) or \
                            (questClass.getHolderType() == 'type' and \
                            questClass.getHolder() == suit['type']) or \
                            (questClass.getHolderType() == 'track' and \
                            questClass.getHolder() == suit['track']) or \
                            (questClass.getHolderType() == 'level' and \
                            questClass.getHolder() <= suit['level']):

                            # It looks like the Cog was valid. Lets see if they
                            # found what they were looking for.
                            baseChance = questClass.getPercentChance()
                            amountRemaining = questClass.getNumItems() - questDesc[QuestProgressIndex]
                            chance = Quests.calcRecoverChance(amountRemaining, baseChance)

                            # They found it! Give them their reward!
                            if chance >= baseChance:
                                questDesc[QuestProgressIndex] += 1
                                recoveredItems.append(questClass.getItem())

                            # Better luck next time :(
                            else:
                                unrecoveredItems.append(questClass.getItem())

            questList.append(questDesc)

        av.b_setQuests(questList)

        return (recoveredItems, unrecoveredItems)
示例#22
0
 def load(self, zoneId):
     self.zoneId = zoneId
     self.parentFSMState.addChild(self.fsm)
     self.loadBattleAnims()
     self.branchZone = ZoneUtil.getBranchZone(zoneId)
     self.canonicalBranchZone = ZoneUtil.getCanonicalBranchZone(zoneId)
     self.music = base.loader.loadMusic(self.musicFile)
     self.activityMusic = base.loader.loadMusic(self.activityMusicFile)
     self.battleMusic = base.loader.loadMusic(
         'phase_3.5/audio/bgm/encntr_general_bg.mid')
     self.townBattle = TownBattle.TownBattle(self.townBattleDoneEvent)
     self.townBattle.load()
    def recoverItems(self, av, suitsKilled, taskZoneId):
        # Get the avatars current quests.
        avQuests = av.getQuests()
        questList = []
        recoveredItems = []
        unrecoveredItems = []
        taskZoneId = ZoneUtil.getBranchZone(taskZoneId)

        # Iterate through the avatars current quests.
        for i in xrange(0, len(avQuests), 5):
            questDesc = avQuests[i : i + 5]
            questClass = Quests.getQuest(questDesc[QuestIdIndex])

            # Check if the Quest isnt already complete
            if questClass.getCompletionStatus(av, questDesc) == Quests.INCOMPLETE:

                # Check if we are dealing with a RecoverItemQuest
                if isinstance(questClass, Quests.RecoverItemQuest):

                    # Iterate through all the Cogs that were killed in the battle
                    for suit in suitsKilled:

                        # Because the RecoveItemQuest class doesn't have a
                        # function to see if a Cog counts. We need to manually
                        # check if the Cog is valid for the Quest
                        if (questClass.getHolder() == Quests.Any) or \
                            (questClass.getHolderType() == 'type' and \
                            questClass.getHolder() == suit['type']) or \
                            (questClass.getHolderType() == 'track' and \
                            questClass.getHolder() == suit['track']) or \
                            (questClass.getHolderType() == 'level' and \
                            questClass.getHolder() <= suit['level']):

                            # It looks like the Cog was valid. Lets see if they
                            # found what they were looking for.
                            baseChance = questClass.getPercentChance()
                            amountRemaining = questClass.getNumItems() - questDesc[QuestProgressIndex]
                            chance = Quests.calcRecoverChance(amountRemaining, baseChance)

                            # They found it! Give them their reward!
                            if chance >= baseChance:
                                questDesc[QuestProgressIndex] += 1
                                recoveredItems.append(questClass.getItem())

                            # Better luck next time :(
                            else:
                                unrecoveredItems.append(questClass.getItem())

            questList.append(questDesc)

        av.b_setQuests(questList)

        return (recoveredItems, unrecoveredItems)
 def begin(self, range, label, gui, tipCategory, zoneId):
     self.waitBar['range'] = range
     self.title['text'] = label
     loadingScreenTex = self.zone2picture.get(ZoneUtil.getBranchZone(zoneId), self.defaultTex)
     self.background = loader.loadTexture(loadingScreenTex)
     self.__count = 0
     self.__expectedCount = range
     if gui:
         if base.localAvatarStyle:
             from toontown.toon import Toon
             bored = {'emote':'bored', 'frame':135} #must define before list
             run = {'emote':'run', 'frame':7}
             victory = {'emote':'victory', 'frame':10}
             applause = {'emote':'applause', 'frame':23}
             dust = {'emote':'sprinkle-dust', 'frame':40}
             hypno = {'emote':'hypnotize', 'frame':25}
             cringe = {'emote':'cringe', 'frame':25}
             wave = {'emote':'wave', 'frame':25}
             shrug = {'emote':'shrug', 'frame':30}
             duck = {'emote':'duck', 'frame':40}
             up = {'emote':'up', 'frame':60}
             pushup = {'emote':'down', 'frame':23}
             bow = {'emote':'bow', 'frame':45}
             emotelist = [bored, run, victory, applause, dust,
                          hypno, cringe, wave, shrug, duck,
                          up, pushup, bow]
             emotechosen = random.choice(emotelist)
             self.toon = Toon.Toon()
             self.toon.setDNA(base.localAvatarStyle)
             self.toon.pose(emotechosen['emote'], emotechosen['frame'])
             self.toon.getGeomNode().setDepthWrite(1)
             self.toon.getGeomNode().setDepthTest(1)
             self.toon.setHpr(205, 0, 0)
             self.toon.setScale(0.18)
             self.toon.setPos(base.a2dBottomRight.getX()/1.25, 0, -0.034)
             self.toon.reparentTo(self.waitBar)
             self.waitBar['frameSize'] = (base.a2dLeft+(base.a2dRight/8.15), base.a2dRight-(base.a2dRight/2.57), -0.03, 0.03)
         self.title.reparentTo(base.a2dpBottomLeft, LOADING_SCREEN_SORT_INDEX)
         self.title.setPos(0.24, 0, 0.23)
         self.tip['text'] = self.getTip(tipCategory)
         self.gui.setPos(0, -0.1, 0)
         self.gui.reparentTo(aspect2d, LOADING_SCREEN_SORT_INDEX)
         self.gui.setTexture(self.background, 1)
         if loadingScreenTex == self.defaultTex:
             self.logo.reparentTo(base.a2dpTopCenter, LOADING_SCREEN_SORT_INDEX)
     else:
         self.title.reparentTo(base.a2dpBottomLeft, LOADING_SCREEN_SORT_INDEX)
         self.gui.reparentTo(hidden)
         self.logo.reparentTo(hidden)
     self.tip.reparentTo(base.a2dpBottomCenter, LOADING_SCREEN_SORT_INDEX)
     self.waitBar.reparentTo(base.a2dpBottomCenter, LOADING_SCREEN_SORT_INDEX)
     self.waitBar.update(self.__count)
示例#25
0
 def streetDone(self):
     self.requestStatus = self.place.doneStatus
     assert (self.notify.debug("streetDone() doneStatus=" +
                               str(self.requestStatus)))
     status = self.place.doneStatus
     # Check the loader, incase this is a change to a SuitInterior:
     if (status["loader"] == "townLoader"
             and ZoneUtil.getBranchZone(status["zoneId"]) == self.branchZone
             and status["shardId"] == None):
         self.fsm.request("quietZone", [status])
     else:
         self.doneStatus = status
         messenger.send(self.doneEvent)
示例#26
0
    def enter(self, requestStatus, visibilityFlag=1, arrowsOn=1):
        teleportDebug(requestStatus, 'Street.enter(%s)' % (requestStatus, ))
        self._ttfToken = None
        self.fsm.enterInitialState()
        base.playMusic(self.loader.music, looping=1, volume=0.8)
        self.loader.geom.reparentTo(render)
        if visibilityFlag:
            self.visibilityOn()
        base.localAvatar.setGeom(self.loader.geom)
        base.localAvatar.setOnLevelGround(1)
        self._telemLimiter = TLGatherAllAvs('Street', RotationLimitToH)
        NametagGlobals.setWant2dNametags(arrowsOn)
        self.zone = ZoneUtil.getBranchZone(requestStatus['zoneId'])

        def __lightDecorationOn__():
            geom = base.cr.playGame.getPlace().loader.geom
            self.halloweenLights = geom.findAllMatches('**/*light*')
            self.halloweenLights += geom.findAllMatches('**/*lamp*')
            self.halloweenLights += geom.findAllMatches('**/prop_snow_tree*')
            for light in self.halloweenLights:
                light.setColorScaleOff(1)

        newsManager = base.cr.newsManager
        if newsManager:
            holidayIds = base.cr.newsManager.getDecorationHolidayId()
            if (ToontownGlobals.HALLOWEEN_COSTUMES in holidayIds
                    or ToontownGlobals.SPOOKY_COSTUMES
                    in holidayIds) and self.loader.hood.spookySkyFile:
                lightsOff = Sequence(
                    LerpColorScaleInterval(base.cr.playGame.hood.loader.geom,
                                           0.1, Vec4(0.55, 0.55, 0.65, 1)),
                    Func(self.loader.hood.startSpookySky))
                lightsOff.start()
            else:
                self.loader.hood.startSky()
                lightsOn = LerpColorScaleInterval(
                    base.cr.playGame.hood.loader.geom, 0.1, Vec4(1, 1, 1, 1))
                lightsOn.start()
        else:
            self.loader.hood.startSky()
            lightsOn = LerpColorScaleInterval(
                base.cr.playGame.hood.loader.geom, 0.1, Vec4(1, 1, 1, 1))
            lightsOn.start()
        self.accept('doorDoneEvent', self.handleDoorDoneEvent)
        self.accept('DistributedDoor_doorTrigger', self.handleDoorTrigger)
        self.enterZone(requestStatus['zoneId'])
        self.tunnelOriginList = base.cr.hoodMgr.addLinkTunnelHooks(
            self, self.loader.nodeList, self.zoneId)
        self.fsm.request(requestStatus['how'], [requestStatus])
        self.replaceStreetSignTextures()
        return
示例#27
0
    def doEnterZone(self, newZoneId):
        if self.zoneId != None:
            for i in self.loader.nodeDict[self.zoneId]:
                if newZoneId:
                    if i not in self.loader.nodeDict[newZoneId]:
                        self.loader.fadeOutDict[i].start()
                        self.loader.exitAnimatedProps(i)
                else:
                    i.stash()
                    self.loader.exitAnimatedProps(i)

        if newZoneId != None:
            for i in self.loader.nodeDict[newZoneId]:
                if self.zoneId:
                    if i not in self.loader.nodeDict[self.zoneId]:
                        self.loader.fadeInDict[i].start()
                        self.loader.enterAnimatedProps(i)
                else:
                    if self.loader.fadeOutDict[i].isPlaying():
                        self.loader.fadeOutDict[i].finish()
                    if self.loader.fadeInDict[i].isPlaying():
                        self.loader.fadeInDict[i].finish()
                    self.loader.enterAnimatedProps(i)
                    i.unstash()

        if newZoneId != self.zoneId:
            if visualizeZones:
                if self.zoneId != None:
                    self.loader.zoneDict[self.zoneId].clearColor()
                if newZoneId != None:
                    self.loader.zoneDict[newZoneId].setColor(0, 0, 1, 1, 100)
            if newZoneId != None:
                if not base.cr.astronSupport:
                    base.cr.sendSetZoneMsg(newZoneId)
                else:
                    visZones = [
                        self.loader.node2zone[x]
                        for x in self.loader.nodeDict[newZoneId]
                    ]
                    visZones.append(ZoneUtil.getBranchZone(newZoneId))
                    base.cr.sendSetZoneMsg(newZoneId, visZones)
                self.notify.debug('Entering Zone %d' % newZoneId)
            self.zoneId = newZoneId
        geom = base.cr.playGame.getPlace().loader.geom
        self.halloweenLights = geom.findAllMatches('**/*light*')
        self.halloweenLights += geom.findAllMatches('**/*lamp*')
        self.halloweenLights += geom.findAllMatches('**/prop_snow_tree*')
        for light in self.halloweenLights:
            light.setColorScaleOff(1)

        return
    def enter(self, requestStatus):
        self.zoneId = requestStatus['zoneId']
        BattlePlace.BattlePlace.enter(self)
        self.fsm.enterInitialState()
        base.playMusic(self.loader.music, looping=1, volume=0.8)
        self.loader.geom.reparentTo(render)
        self.nodeList = [self.loader.geom]
        self._telemLimiter = TLGatherAllAvs('CogHQExterior', RotationLimitToH)
        self.accept('doorDoneEvent', self.handleDoorDoneEvent)
        self.accept('DistributedDoor_doorTrigger', self.handleDoorTrigger)
        NametagGlobals.setWant2dNametags(True)
        self.tunnelOriginList = base.cr.hoodMgr.addLinkTunnelHooks(self, self.nodeList, self.zoneId)
        how = requestStatus['how']
        self.fsm.request(how, [requestStatus])

        # Load the CogHQ DNA file:
        dnaStore = DNAStorage()
        dnaFileName = self.genDNAFileName(ZoneUtil.getBranchZone(self.zoneId))
        loadDNAFileAI(dnaStore, dnaFileName)

        # Collect all of the vis group zone IDs:
        self.zoneVisDict = {}
        for i in xrange(dnaStore.getNumDNAVisGroupsAI()):
            groupFullName = dnaStore.getDNAVisGroupName(i)
            visGroup = dnaStore.getDNAVisGroupAI(i)
            visZoneId = int(base.cr.hoodMgr.extractGroupName(groupFullName))
            visZoneId = ZoneUtil.getTrueZoneId(visZoneId, self.zoneId)
            visibles = []
            for i in xrange(visGroup.getNumVisibles()):
                visibles.append(int(visGroup.visibles[i]))
            visibles.append(ZoneUtil.getBranchZone(visZoneId))
            self.zoneVisDict[visZoneId] = visibles

        # Next, we want interest in all vis groups due to this being a Cog HQ:
        base.cr.sendSetZoneMsg(self.zoneId, self.zoneVisDict.values()[0])

        # Finally, cleanup our DNAStorage as we wont be needing it anymore:
        dnaStore.cleanup()
 def knockKnockTrack(self, avatar, duration):
     if avatar == None:
         return
     self.rimshot = base.loader.loadSfx('phase_5/audio/sfx/AA_heal_telljoke.ogg')
     self.knockSfx = base.loader.loadSfx('phase_5/audio/sfx/GUI_knock_3.ogg')
     joke = KnockKnockJokes[(self.propId % len(KnockKnockJokes))]
     place = base.cr.playGame.getPlace()
     doorName = TTLocalizer.DoorNametag
     if place:
         zone = place.getZoneId()
         branch = ZoneUtil.getBranchZone(zone)
         if branch == ToontownGlobals.SillyStreet:
             if self.propId in KnockKnockContestJokes[ToontownGlobals.SillyStreet].keys():
                 joke = KnockKnockContestJokes[ToontownGlobals.SillyStreet][self.propId]
                 doorName = KnockKnockDoorNames[self.propId]
         else:
             if branch == ToontownGlobals.LoopyLane:
                 if self.propId in KnockKnockContestJokes[ToontownGlobals.LoopyLane].keys():
                     joke = KnockKnockContestJokes[ToontownGlobals.LoopyLane][self.propId]
             else:
                 if branch == ToontownGlobals.PunchlinePlace:
                     if self.propId == 1:
                         joke = KnockKnockContestJokes[ToontownGlobals.PunchlinePlace]
                 else:
                     if branch == ToontownGlobals.PolarPlace:
                         if self.propId in KnockKnockContestJokes[ToontownGlobals.PolarPlace].keys():
                             joke = KnockKnockContestJokes[ToontownGlobals.PolarPlace][self.propId]
     self.nametag = None
     self.nametagNP = None
     doorNP = render.find('**/KnockKnockDoorSphere_' + str(self.propId) + ';+s')
     if doorNP.isEmpty():
         self.notify.warning('Could not find KnockKnockDoorSphere_%s' % self.propId)
         return
     self.nametag = NametagGroup()
     self.nametag.setAvatar(doorNP)
     self.nametag.setFont(ToontownGlobals.getToonFont())
     self.nametag.setSpeechFont(ToontownGlobals.getToonFont())
     self.nametag.setName(doorName)
     self.nametag.setActive(0)
     self.nametag.manage(base.marginManager)
     self.nametag.getNametag3d().setBillboardOffset(4)
     nametagNode = self.nametag.getNametag3d()
     self.nametagNP = render.attachNewNode(nametagNode)
     self.nametagNP.setName('knockKnockDoor_nt_' + str(self.propId))
     pos = doorNP.getBounds().getCenter()
     self.nametagNP.setPos(pos + Vec3(0, 0, avatar.getHeight() + 2))
     d = duration * 0.125
     track = Sequence(Parallel(Sequence(Wait(d * 0.5), SoundInterval(self.knockSfx)), Func(self.nametag.setChat, TTLocalizer.DoorKnockKnock, CFSpeech), Wait(d)), Func(avatar.setChatAbsolute, TTLocalizer.DoorWhosThere, CFSpeech | CFTimeout, openEnded=0), Wait(d), Func(self.nametag.setChat, joke[0], CFSpeech), Wait(d), Func(avatar.setChatAbsolute, joke[0] + TTLocalizer.DoorWhoAppendix, CFSpeech | CFTimeout, openEnded=0), Wait(d), Func(self.nametag.setChat, joke[1], CFSpeech), Parallel(SoundInterval(self.rimshot, startTime=2.0), Wait(d * 4)), Func(self.cleanupTrack))
     track.delayDelete = DelayDelete.DelayDelete(avatar, 'knockKnockTrack')
     return track
示例#30
0
 def handlePlaygroundDone( self ):
     assert( self.notify.debug( "handlePlaygroundDone()" ) )
     status = self.place.doneStatus
     if( self.enteringARace( status ) and status.get( 'shardId' ) == None ):
         # GIVE THIS A WHIRL
         zoneId = status[ 'zoneId' ]
         self.fsm.request( 'quietZone', [ status ] )
     elif (ZoneUtil.getBranchZone(status["zoneId"]) == self.hood.hoodId and
         # Going to Kart Shop
         status["shardId"] == None):
         self.fsm.request("quietZone", [status])            
     else:
         self.doneStatus = status
         messenger.send( self.doneEvent )
示例#31
0
    def load(self, zoneId):
        self.zoneId = zoneId
        self.parentFSMState.addChild(self.fsm)
        self.loadBattleAnims()
        self.branchZone = ZoneUtil.getBranchZone(zoneId)
        self.canonicalBranchZone = ZoneUtil.getCanonicalBranchZone(zoneId)
        self.music = base.loadMusic(self.musicFile)
        self.activityMusic = base.loadMusic(self.activityMusicFile)
        self.battleMusic = base.loadMusic(
            'phase_3.5/audio/bgm/encntr_general_bg.ogg')
        if settings['newGui'] == True:
            self.townBattle = TownBattleNEW.TownBattleNEW(
                self.townBattleDoneEvent)
            self.townBattle.load()
        else:
            self.townBattle = TownBattleOLD.TownBattleOLD(
                self.townBattleDoneEvent)
            self.townBattle.load()

        if config.GetBool('want-april-toons', 0):
            self.npc = NPCToons.createLocalNPC(91915)
            self.npc.reparentTo(base.localAvatar)
            self.npc.setZ(30)
            self.npc.hide()
            self.piano = loader.loadModel('phase_5/models/props/piano-mod')
            self.piano.setZ(250)
            self.piano.setHpr(0, 90, 0)
            self.piano.reparentTo(base.localAvatar)
            self.piano.setScale(0)
            self.pianoSfx = base.loadSfx('phase_5/audio/sfx/AA_drop_piano.ogg')
            self.dropSfx = base.loadSfx('phase_5/audio/sfx/cogbldg_drop.ogg')
            self.pianoDropSound = Sequence(
                Func(base.playSfx, self.dropSfx), Wait(6.7),
                Func(base.playSfx, self.pianoSfx),
                Func(base.localAvatar.b_setAnimState, 'Squish'), Wait(2.5),
                Func(self.pianoSfx.stop))
            self.pianoDropSequence = Sequence(
                Wait(randint(10, 60)), Func(self.pianoDropSound.start),
                Parallel(self.piano.scaleInterval(1, (3, 3, 3)),
                         self.piano.posInterval(7, (0, 0, 0))),
                self.piano.posInterval(0.1, (0, 0, 0.5)),
                self.piano.posInterval(0.1, (0, 0, 0)), Wait(0.4),
                Parallel(
                    Func(self.npc.addActive),
                    Func(self.npc.setChatAbsolute, 'Whoops! My bad!',
                         CFSpeech | CFTimeout)),
                self.piano.scaleInterval(1, (0, 0, 0)), Wait(5),
                Func(self.npc.removeActive))
            self.pianoDropSequence.loop()
示例#32
0
文件: Street.py 项目: CoolFangs/src
    def enter(self, requestStatus, visibilityFlag=1, arrowsOn=1):
        teleportDebug(requestStatus, "Street.enter(%s)" % (requestStatus,))
        self._ttfToken = None
        self.fsm.enterInitialState()
        base.playMusic(self.loader.music, looping=1, volume=0.8)
        self.loader.geom.reparentTo(render)
        if visibilityFlag:
            self.visibilityOn()
        base.localAvatar.setGeom(self.loader.geom)
        base.localAvatar.setOnLevelGround(1)
        self._telemLimiter = TLGatherAllAvs("Street", RotationLimitToH)
        NametagGlobals.setWant2dNametags(arrowsOn)
        self.zone = ZoneUtil.getBranchZone(requestStatus["zoneId"])

        def __lightDecorationOn__():
            geom = base.cr.playGame.getPlace().loader.geom
            self.halloweenLights = geom.findAllMatches("**/*light*")
            self.halloweenLights += geom.findAllMatches("**/*lamp*")
            self.halloweenLights += geom.findAllMatches("**/prop_snow_tree*")
            for light in self.halloweenLights:
                light.setColorScaleOff(1)

        newsManager = base.cr.newsManager
        if newsManager:
            holidayIds = base.cr.newsManager.getDecorationHolidayId()
            if (
                ToontownGlobals.HALLOWEEN_COSTUMES in holidayIds or ToontownGlobals.SPOOKY_COSTUMES in holidayIds
            ) and self.loader.hood.spookySkyFile:
                lightsOff = Sequence(
                    LerpColorScaleInterval(base.cr.playGame.hood.loader.geom, 0.1, Vec4(0.55, 0.55, 0.65, 1)),
                    Func(self.loader.hood.startSpookySky),
                )
                lightsOff.start()
            else:
                self.loader.hood.startSky()
                lightsOn = LerpColorScaleInterval(base.cr.playGame.hood.loader.geom, 0.1, Vec4(1, 1, 1, 1))
                lightsOn.start()
        else:
            self.loader.hood.startSky()
            lightsOn = LerpColorScaleInterval(base.cr.playGame.hood.loader.geom, 0.1, Vec4(1, 1, 1, 1))
            lightsOn.start()
        self.accept("doorDoneEvent", self.handleDoorDoneEvent)
        self.accept("DistributedDoor_doorTrigger", self.handleDoorTrigger)
        self.enterZone(requestStatus["zoneId"])
        self.tunnelOriginList = base.cr.hoodMgr.addLinkTunnelHooks(self, self.loader.nodeList, self.zoneId)
        self.fsm.request(requestStatus["how"], [requestStatus])
        self.replaceStreetSignTextures()
        return
	def doEnterZone(self, newZoneId):
		if self.zoneId != None:
			for i in self.loader.nodeDict[self.zoneId]:
				if newZoneId:
					if i not in self.loader.nodeDict[newZoneId]:
						self.loader.fadeOutDict[i].start()
						self.loader.exitAnimatedProps(i)
				else:
					i.stash()
					self.loader.exitAnimatedProps(i)

		if newZoneId != None:
			for i in self.loader.nodeDict[newZoneId]:
				if self.zoneId:
					if i not in self.loader.nodeDict[self.zoneId]:
						self.loader.fadeInDict[i].start()
						self.loader.enterAnimatedProps(i)
						i.unstash()
				else:
					if self.loader.fadeOutDict[i].isPlaying():
						self.loader.fadeOutDict[i].finish()
					if self.loader.fadeInDict[i].isPlaying():
						self.loader.fadeInDict[i].finish()
					self.loader.enterAnimatedProps(i)
					i.unstash()

		if newZoneId != self.zoneId:
			if visualizeZones:
				if self.zoneId != None:
					self.loader.zoneDict[self.zoneId].clearColor()
				if newZoneId != None:
					self.loader.zoneDict[newZoneId].setColor(0, 0, 1, 1, 100)
			if newZoneId is not None:
				loader = base.cr.playGame.getPlace().loader
			if newZoneId != None:
				visZones = [self.loader.nodeToZone[x] for x in self.loader.nodeDict[newZoneId]]
				visZones.append(ZoneUtil.getBranchZone(newZoneId))
				base.cr.sendSetZoneMsg(newZoneId, visZones)
				self.notify.debug('Entering Zone %d' % newZoneId)
			self.zoneId = newZoneId
		geom = base.cr.playGame.getPlace().loader.geom
		self.eventLights = geom.findAllMatches('**/*light*')
		self.eventLights += geom.findAllMatches('**/*lamp*')
		self.eventLights += geom.findAllMatches('**/prop_snow_tree*')
		self.eventLights += geom.findAllMatches('**/prop_tree*')
		self.eventLights += geom.findAllMatches('**/*christmas*')
		for light in self.eventLights:
			light.setColorScaleOff(1)
示例#34
0
 def load(self, zoneId):
     self.zoneId = zoneId
     self.parentFSMState.addChild(self.fsm)
     self.loadBattleAnims()
     self.branchZone = ZoneUtil.getBranchZone(zoneId)
     self.canonicalBranchZone = ZoneUtil.getCanonicalBranchZone(zoneId)
     self.music = base.loader.loadMusic(self.musicFile)
     self.activityMusic = base.loader.loadMusic(self.activityMusicFile)
     if not self.battleMusic:
         self.battleMusic = base.loader.loadMusic(
             'phase_3.5/audio/bgm/encntr_general_bg.ogg')
     self.townBattle = TownBattle.TownBattle(self.townBattleDoneEvent)
     self.townBattle.load()
     if base.cr.newsManager:
         if base.cr.newsManager.isHolidayRunning(APRIL_FOOLS_COSTUMES):
             taskMgr.doMethodLater(randint(10, 60), self.pianoDropTask,
                                   'piano-drop-task')
示例#35
0
 def __teleportOutDone(self, requestStatus):
     hoodId = requestStatus['hoodId']
     zoneId = requestStatus['zoneId']
     shardId = requestStatus['shardId']
     if hoodId == self.loader.hood.id and shardId == None:
         if zoneId == self.zoneId:
             self.fsm.request('teleportIn', [requestStatus])
         elif requestStatus['where'] == 'street' and ZoneUtil.getBranchZone(zoneId) == self.loader.branchZone:
             self.fsm.request('quietZone', [requestStatus])
         else:
             self.doneStatus = requestStatus
             messenger.send(self.doneEvent)
     elif hoodId == ToontownGlobals.MyEstate:
         self.getEstateZoneAndGoHome(requestStatus)
     else:
         self.doneStatus = requestStatus
         messenger.send(self.doneEvent)
示例#36
0
 def _Street__teleportOutDone(self, requestStatus):
     hoodId = requestStatus["hoodId"]
     zoneId = requestStatus["zoneId"]
     shardId = requestStatus["shardId"]
     if hoodId == self.loader.hood.id and shardId == None:
         if zoneId == self.zoneId:
             self.fsm.request("teleportIn", [requestStatus])
         elif requestStatus["where"] == "street" and ZoneUtil.getBranchZone(zoneId) == self.loader.branchZone:
             self.fsm.request("quietZone", [requestStatus])
         else:
             self.doneStatus = requestStatus
             messenger.send(self.doneEvent)
     elif hoodId == ToontownGlobals.MyEstate:
         self.getEstateZoneAndGoHome(requestStatus)
     else:
         self.doneStatus = requestStatus
         messenger.send(self.doneEvent)
    def load(self, zoneId):
        self.zoneId = zoneId
        self.parentFSMState.addChild(self.fsm)
        self.loadBattleAnims()
        self.branchZone = ZoneUtil.getBranchZone(zoneId)
        self.canonicalBranchZone = ZoneUtil.getCanonicalBranchZone(zoneId)
        self.music = base.loadMusic(self.musicFile)
        self.activityMusic = base.loadMusic(self.activityMusicFile)
        self.battleMusic = base.loadMusic('phase_3.5/audio/bgm/encntr_general_tt.ogg')
        self.townBattle = TownBattle.TownBattle(self.townBattleDoneEvent)
        self.townBattle.load()

        if config.GetBool('want-april-toons', 0):
            self.npc = NPCToons.createLocalNPC(91915)
            self.npc.reparentTo(base.localAvatar)
            self.npc.setZ(30)
            self.npc.hide()
            self.piano = loader.loadModel('phase_5/models/props/piano-mod')
            self.piano.setZ(250)
            self.piano.setHpr(0, 90, 0)
            self.piano.reparentTo(base.localAvatar)
            self.piano.setScale(0)
            self.pianoSfx = base.loadSfx('phase_5/audio/sfx/AA_drop_piano.ogg')
            self.dropSfx = base.loadSfx('phase_5/audio/sfx/cogbldg_drop.ogg')
            self.pianoDropSound = Sequence(
                Func(base.playSfx, self.dropSfx),
                Wait(6.7),
                Func(base.playSfx, self.pianoSfx),
                Func(base.localAvatar.b_setAnimState, 'Squish'),
                Wait(2.5),
                Func(self.pianoSfx.stop)
            )
            self.pianoDropSequence = Sequence(
                Wait(randint(10, 60)),
                Func(self.pianoDropSound.start),
                Parallel(self.piano.scaleInterval(1, (3, 3, 3)), self.piano.posInterval(7, (0, 0, 0))),
                self.piano.posInterval(0.1, (0, 0, 0.5)),
                self.piano.posInterval(0.1, (0, 0, 0)),
                Wait(0.4),
                Parallel(Func(self.npc.addActive), Func(self.npc.setChatAbsolute, 'Whoops! My bad!', CFSpeech|CFTimeout)),
                self.piano.scaleInterval(1, (0, 0, 0)),
                Wait(5),
                Func(self.npc.removeActive)
            )
            self.pianoDropSequence.loop()
 def toonKilledBuilding(self, toon, type, difficulty, floors, zoneId, activeToons):
     flattenedQuests = toon.getQuests()
     questList = [] #unflattened
     zoneId = ZoneUtil.getBranchZone(zoneId)
     recoveredItems = []
     unrecoveredItems = []
     for i in xrange(0, len(flattenedQuests), 5):
         questDesc = flattenedQuests[i : i + 5]
         questClass = Quests.getQuest(questDesc[0])
         if questClass.getCompletionStatus(toon, questDesc) == Quests.INCOMPLETE:
             if isinstance(questClass, Quests.BuildingQuest):
                 if questClass.isLocationMatch(zoneId):
                     if questClass.getBuildingTrack() == type or Quests.Any:
                         if questClass.doesBuildingCount(toon, activeToons):
                             if floors >= questClass.getNumFloors():
                                 questDesc[4] += 1
         questList.append(questDesc)
     toon.b_setQuests(questList)
示例#39
0
    def handleInterests(self):
        dnaStore = DNAStorage()
        dnaFileName = self.genDNAFileName(self.zoneId)
        loadDNAFileAI(dnaStore, dnaFileName)
        self.zoneVisDict = {}
        for i in xrange(dnaStore.getNumDNAVisGroupsAI()):
            groupFullName = dnaStore.getDNAVisGroupName(i)
            visGroup = dnaStore.getDNAVisGroupAI(i)
            visZoneId = int(base.cr.hoodMgr.extractGroupName(groupFullName))
            visZoneId = ZoneUtil.getTrueZoneId(visZoneId, self.zoneId)
            visibles = []
            for i in xrange(visGroup.getNumVisibles()):
                visibles.append(int(visGroup.getVisibleName(i)))

            visibles.append(ZoneUtil.getBranchZone(visZoneId))
            self.zoneVisDict[visZoneId] = visibles

        base.cr.sendSetZoneMsg(self.zoneId, self.zoneVisDict.values()[0])
示例#40
0
 def __teleportOutDone(self, requestStatus):
     hoodId = requestStatus['hoodId']
     zoneId = requestStatus['zoneId']
     shardId = requestStatus['shardId']
     if hoodId == self.loader.hood.id and shardId == None:
         if zoneId == self.zoneId:
             self.fsm.request('teleportIn', [requestStatus])
         elif requestStatus['where'] == 'street' and ZoneUtil.getBranchZone(zoneId) == self.loader.branchZone:
             self.fsm.request('quietZone', [requestStatus])
         else:
             self.doneStatus = requestStatus
             messenger.send(self.doneEvent)
     elif hoodId == ToontownGlobals.MyEstate:
         self.getEstateZoneAndGoHome(requestStatus)
     else:
         self.doneStatus = requestStatus
         messenger.send(self.doneEvent)
     return
    def announceGenerate(self):
        DistributedEvent.announceGenerate(self)
        dnaStore = DNAStorage()
        dnaFileToLoad = 'phase_4/dna/toontown_central_old_sz.pdna'
        loadDNAFileAI(dnaStore, dnaFileToLoad)
        zoneVisDict = {}
        for i in xrange(dnaStore.getNumDNAVisGroupsAI()):
            groupFullName = dnaStore.getDNAVisGroupName(i)
            visGroup = dnaStore.getDNAVisGroupAI(i)
            visZoneId = int(base.cr.hoodMgr.extractGroupName(groupFullName))
            visibles = []
            for i in xrange(visGroup.getNumVisibles()):
                visibles.append(int(visGroup.visibles[i]))

            visibles.append(ZoneUtil.getBranchZone(visZoneId))
            zoneVisDict[visZoneId] = visibles

        self.cr.sendSetZoneMsg(self.zoneId, zoneVisDict.values()[0])
 def toonKilledBuilding(self, toon, type, difficulty, floors, zoneId, activeToons):
     flattenedQuests = toon.getQuests()
     questList = [] #unflattened
     zoneId = ZoneUtil.getBranchZone(zoneId)
     recoveredItems = []
     unrecoveredItems = []
     for i in xrange(0, len(flattenedQuests), 5):
         questDesc = flattenedQuests[i : i + 5]
         questClass = Quests.getQuest(questDesc[0])
         if questClass.getCompletionStatus(toon, questDesc) == Quests.INCOMPLETE:
             if isinstance(questClass, Quests.BuildingQuest):
                 if questClass.isLocationMatch(zoneId):
                     if questClass.getBuildingTrack() == type or Quests.Any:
                         if questClass.doesBuildingCount(toon, activeToons):
                             if floors >= questClass.getNumFloors():
                                 questDesc[4] += 1
         questList.append(questDesc)
     toon.b_setQuests(questList)
    def enter(self, requestStatus):
        self.zoneId = requestStatus['zoneId']

        # Load the CogHQ DNA file:
        dnaStore = DNAStorage()
        dnaFileName = self.genDNAFileName(self.zoneId)

        if not dnaFileName.endswith('13200.pdna'):

            loadDNAFileAI(dnaStore, dnaFileName)

            # Collect all of the vis group zone IDs:
            self.zoneVisDict = {}
            for i in range(dnaStore.getNumDNAVisGroupsAI()):
                groupFullName = dnaStore.getDNAVisGroupName(i)
                visGroup = dnaStore.getDNAVisGroupAI(i)
                visZoneId = int(
                    base.cr.hoodMgr.extractGroupName(groupFullName))
                visZoneId = ZoneUtil.getTrueZoneId(visZoneId, self.zoneId)
                visibles = []
                for i in range(visGroup.getNumVisibles()):
                    visibles.append(int(visGroup.visibles[i]))
                visibles.append(ZoneUtil.getBranchZone(visZoneId))
                self.zoneVisDict[visZoneId] = visibles

            # Next, we want interest in all vis groups due to this being a Cog HQ:
            base.cr.sendSetZoneMsg(self.zoneId,
                                   list(self.zoneVisDict.values())[0])

        BattlePlace.BattlePlace.enter(self)
        self.fsm.enterInitialState()
        base.playMusic(self.loader.music, looping=1, volume=0.8)
        self.loader.geom.reparentTo(render)
        self.nodeList = [self.loader.geom]
        self.loader.hood.startSky()
        self._telemLimiter = TLGatherAllAvs('FactoryExterior',
                                            RotationLimitToH)
        self.accept('doorDoneEvent', self.handleDoorDoneEvent)
        self.accept('DistributedDoor_doorTrigger', self.handleDoorTrigger)
        NametagGlobals.setWant2dNametags(True)
        self.tunnelOriginList = base.cr.hoodMgr.addLinkTunnelHooks(
            self, self.nodeList, self.zoneId)
        how = requestStatus['how']
        self.fsm.request(how, [requestStatus])
    def toonKilledBuilding(self, av, type, difficulty, floors, zoneId, cogdo):
        # Get the avatars current quests.
        messenger.send('topToonsManager-event', [av.doId, TopToonsGlobals.CAT_BLDG, 1])
        avQuests = av.getQuests()
        questList = []
        zoneId = ZoneUtil.getBranchZone(zoneId)

        # Iterate through the avatars current quests.
        for i in xrange(0, len(avQuests), 5):
            questDesc = avQuests[i : i + 5]
            questClass = Quests.getQuest(questDesc[QuestIdIndex])
            if isinstance(questClass, Quests.BuildingQuest) and questClass.getCompletionStatus(av, questDesc) == Quests.INCOMPLETE:
                if questClass.isLocationMatch(zoneId) and questClass.doesBuildingTypeCount(type):
                    if questClass.isCogdo() == cogdo:
                        if floors >= questClass.getNumFloors():
                            questDesc[QuestProgressIndex] += 1
            questList.append(questDesc)

        av.b_setQuests(questList)
    def toonKilledBuilding(self, av, type, difficulty, floors, zoneId,
                           activeToons):
        avQuests = av.getQuests()
        questList = []
        zoneId = ZoneUtil.getBranchZone(zoneId)
        for i in xrange(0, len(avQuests), 5):
            questDesc = avQuests[i:i + 5]
            questClass = Quests.getQuest(questDesc[QuestIdIndex])
            if questClass.getCompletionStatus(av,
                                              questDesc) == Quests.INCOMPLETE:
                if isinstance(questClass, Quests.BuildingQuest):
                    if questClass.isLocationMatch(zoneId):
                        if questClass.doesBuildingTypeCount(type):
                            if questClass.doesBuildingCount(av, activeToons):
                                if floors >= questClass.getNumFloors():
                                    questDesc[QuestProgressIndex] += 1
            questList.append(questDesc)

        av.b_setQuests(questList)
示例#46
0
    def recoverItems(self, av, suits, zoneId):
        zoneId = ZoneUtil.getBranchZone(zoneId)

        quests = av.getQuests()
        newQuests = []

        recovered = []
        unrecovered = []

        for i in xrange(0, len(quests), 5):
            quest = quests[i:i + 5]
            klass = Quests.getQuest(quest[0])

            if klass.getCompletionStatus(av, quest) == Quests.INCOMPLETE:
                if isinstance(klass, Quests.RecoverItemQuest):
                    if klass.getHolder() != Quests.AnyFish:
                        item = klass.getItem()

                        for suit in suits:
                            if klass.getCompletionStatus(
                                    av, quest) == Quests.COMPLETE:
                                break

                            if klass.doesCogCount(av.doId, suit, zoneId,
                                                  suit['activeToons']):
                                if random.random(
                                ) <= klass.getPercentChance() / 100.0:
                                    quest[4] += 1
                                    recovered.append(item)

                                else:
                                    unrecovered.append(item)

                            else:
                                self.notify.debug(
                                    "Recover: Suit %s at %s does not count" %
                                    (suit, zoneId))

            newQuests.append(quest)

        av.b_setQuests(newQuests)

        return recovered, unrecovered
示例#47
0
 def begin(self, range, label, gui, tipCategory, zoneId):
     self.waitBar['range'] = range
     self.title['text'] = label
     loadingScreenTex = self.zone2picture.get(
         ZoneUtil.getBranchZone(zoneId), self.defaultTex)
     self.background = loader.loadTexture(loadingScreenTex)
     self.__count = 0
     self.__expectedCount = range
     if gui:
         if base.localAvatarStyle:
             from toontown.toon import Toon
             self.toon = Toon.Toon()
             self.toon.setDNA(base.localAvatarStyle)
             self.toon.loop('bored', fromFrame=135, toFrame=135)
             self.toon.getGeomNode().setDepthWrite(1)
             self.toon.getGeomNode().setDepthTest(1)
             self.toon.setHpr(205, 0, 0)
             self.toon.setScale(0.18)
             self.toon.setPos(base.a2dBottomRight.getX() / 1.25, 0, -0.034)
             self.toon.reparentTo(self.waitBar)
             self.waitBar['frameSize'] = (base.a2dLeft +
                                          (base.a2dRight / 8.15),
                                          base.a2dRight -
                                          (base.a2dRight / 2.57), -0.03,
                                          0.03)
         self.title.reparentTo(base.a2dpBottomLeft,
                               LOADING_SCREEN_SORT_INDEX)
         self.title.setPos(0.24, 0, 0.23)
         self.gui.setPos(0, -0.1, 0)
         self.gui.reparentTo(aspect2d, LOADING_SCREEN_SORT_INDEX)
         self.gui.setTexture(self.background, 1)
         if loadingScreenTex == self.defaultTex:
             self.logo.reparentTo(base.a2dpTopCenter,
                                  LOADING_SCREEN_SORT_INDEX)
     else:
         self.title.reparentTo(base.a2dpBottomLeft,
                               LOADING_SCREEN_SORT_INDEX)
         self.gui.reparentTo(hidden)
         self.logo.reparentTo(hidden)
     self.waitBar.reparentTo(base.a2dpBottomCenter,
                             LOADING_SCREEN_SORT_INDEX)
     self.waitBar.update(self.__count)
    def toonKilledCogdo(self, av, type, difficulty, zoneId, activeToons):
        self.notify.debug(
            "toonKilledCogdo(%s, '%s', %s, %d, %s)" %
            (str(av), type, str(difficulty), zoneId, str(activeToons)))
        avQuests = av.getQuests()
        questList = []
        zoneId = ZoneUtil.getBranchZone(zoneId)
        for i in xrange(0, len(avQuests), 5):
            questDesc = avQuests[i:i + 5]
            questClass = Quests.getQuest(questDesc[QuestIdIndex])
            if questClass.getCompletionStatus(av,
                                              questDesc) == Quests.INCOMPLETE:
                if isinstance(questClass, Quests.CogdoQuest):
                    if questClass.isLocationMatch(zoneId):
                        if questClass.doesCogdoTypeCount(type):
                            if questClass.doesCogdoCount(av, activeToons):
                                questDesc[QuestProgressIndex] += 1
            questList.append(questDesc)

        av.b_setQuests(questList)
示例#49
0
    def enter(self, requestStatus):
        CogHQExterior.CogHQExterior.enter(self, requestStatus)
        self.loader.hood.startSky()
        dnaStore = DNAStorage()
        dnaFileName = self.genDNAFileName(self.zoneId)
        loadDNAFileAI(dnaStore, dnaFileName)
        self.zoneVisDict = {}
        for i in xrange(dnaStore.getNumDNAVisGroupsAI()):
            groupFullName = dnaStore.getDNAVisGroupName(i)
            visGroup = dnaStore.getDNAVisGroupAI(i)
            visZoneId = int(base.cr.hoodMgr.extractGroupName(groupFullName))
            visZoneId = ZoneUtil.getTrueZoneId(visZoneId, self.zoneId)
            visibles = []
            for i in xrange(visGroup.getNumVisibles()):
                visibles.append(int(visGroup.visibles[i]))

            visibles.append(ZoneUtil.getBranchZone(visZoneId))
            self.zoneVisDict[visZoneId] = visibles

        base.cr.sendSetZoneMsg(self.zoneId, self.zoneVisDict.values()[0])
示例#50
0
    def toonKilledBuilding(self, av, type, difficulty, floors, zoneId, activeToons):
        # Get the avatars current quests.
        avQuests = av.getQuests()
        questList = []
        zoneId = ZoneUtil.getBranchZone(zoneId)

        # Iterate through the avatars current quests.
        for i in xrange(0, len(avQuests), 5):
            questDesc = avQuests[i : i + 5]
            questClass = Quests.getQuest(questDesc[QuestIdIndex])
            if questClass.getCompletionStatus(av, questDesc) == Quests.INCOMPLETE:
                if isinstance(questClass, Quests.BuildingQuest):
                    if questClass.isLocationMatch(zoneId):
                        if questClass.doesBuildingTypeCount(type):
                            if questClass.doesBuildingCount(av, activeToons):
                                if floors >= questClass.getNumFloors():
                                    questDesc[QuestProgressIndex] += 1
            questList.append(questDesc)

        av.b_setQuests(questList)
    def recoverItems(self, av, suitsKilled, taskZoneId):
        # Get the avatars current quests.
        avQuests = av.getQuests()
        questList = []
        recoveredItems = []
        unrecoveredItems = []
        taskZoneId = ZoneUtil.getBranchZone(taskZoneId)

        # Iterate through the avatars current quests.
        for i in xrange(0, len(avQuests), 5):
            questDesc = avQuests[i:i + 5]
            questClass = Quests.getQuest(questDesc[QuestIdIndex])
            if questClass.getCompletionStatus(av,
                                              questDesc) == Quests.INCOMPLETE:
                if isinstance(questClass, Quests.CogQuest):
                    for suit in suitsKilled:
                        if questClass.doesCogCount(av.doId, suit, taskZoneId,
                                                   suit['activeToons']):
                            questDesc[QuestProgressIndex] += 1
                elif isinstance(questClass, Quests.RecoverItemQuest):
                    if questClass.getHolder() != Quests.AnyFish:
                        for suit in suitsKilled:
                            if questClass.doesCogCount(av.doId, suit,
                                                       taskZoneId,
                                                       suit['activeToons']):
                                baseChance = questClass.getPercentChance()
                                amountRemaining = questClass.getNumItems(
                                ) - questDesc[QuestProgressIndex]
                                chance = Quests.calcRecoverChance(
                                    amountRemaining, baseChance)
                                if chance >= baseChance:
                                    questDesc[QuestProgressIndex] += 1
                                    recoveredItems.append(questClass.getItem())
                                else:
                                    unrecoveredItems.append(
                                        questClass.getItem())
            questList.append(questDesc)

        av.b_setQuests(questList)
        return (recoveredItems, unrecoveredItems)
    def handleInterests(self):
        # First, we need to load the DNA file for this Cog HQ.
        dnaStore = DNAStorage()
        dnaFileName = self.genDNAFileName(self.zoneId)
        loadDNAFileAI(dnaStore, dnaFileName)

        # Next, we need to collect all of the visgroup zone IDs.
        self.zoneVisDict = {}
        for i in xrange(dnaStore.getNumDNAVisGroupsAI()):
            groupFullName = dnaStore.getDNAVisGroupName(i)
            visGroup = dnaStore.getDNAVisGroupAI(i)
            visZoneId = int(base.cr.hoodMgr.extractGroupName(groupFullName))
            visZoneId = ZoneUtil.getTrueZoneId(visZoneId, self.zoneId)
            visibles = []
            for i in xrange(visGroup.getNumVisibles()):
                visibles.append(int(visGroup.getVisibleName(i)))

            visibles.append(ZoneUtil.getBranchZone(visZoneId))
            self.zoneVisDict[visZoneId] = visibles

        # Finally, we want interest in all visgroups due to this being a Cog HQ.
        base.cr.sendSetZoneMsg(self.zoneId, self.zoneVisDict.values()[0])
示例#53
0
    def enter(self, requestStatus):
        self.zoneId = requestStatus["zoneId"]

        # Load the CogHQ DNA file:
        dnaStore = DNAStorage()
        dnaFileName = self.genDNAFileName(self.zoneId)

        if not dnaFileName.endswith("13200.pdna"):

            loadDNAFileAI(dnaStore, dnaFileName)

            # Collect all of the vis group zone IDs:
            self.zoneVisDict = {}
            for i in xrange(dnaStore.getNumDNAVisGroupsAI()):
                groupFullName = dnaStore.getDNAVisGroupName(i)
                visGroup = dnaStore.getDNAVisGroupAI(i)
                visZoneId = int(base.cr.hoodMgr.extractGroupName(groupFullName))
                visibles = []
                for i in xrange(visGroup.getNumVisibles()):
                    visibles.append(int(visGroup.getVisible(i)))
                visibles.append(ZoneUtil.getBranchZone(visZoneId))
                self.zoneVisDict[visZoneId] = visibles

            # Next, we want interest in all vis groups due to this being a Cog HQ:
            base.cr.sendSetZoneMsg(self.zoneId, self.zoneVisDict.values()[0])

        BattlePlace.BattlePlace.enter(self)
        self.fsm.enterInitialState()
        base.playMusic(self.loader.music, looping=1, volume=0.8)
        self.loader.geom.reparentTo(render)
        self.nodeList = [self.loader.geom]
        self.loader.hood.startSky()
        self._telemLimiter = TLGatherAllAvs("FactoryExterior", RotationLimitToH)
        self.accept("doorDoneEvent", self.handleDoorDoneEvent)
        self.accept("DistributedDoor_doorTrigger", self.handleDoorTrigger)
        NametagGlobals.setMasterArrowsOn(1)
        self.tunnelOriginList = base.cr.hoodMgr.addLinkTunnelHooks(self, self.nodeList)
        how = requestStatus["how"]
        self.fsm.request(how, [requestStatus])
示例#54
0
    def toonKilledBuilding(self, av, type, difficulty, floors, zoneId, cogdo):
        # Get the avatars current quests.
        messenger.send("topToonsManager-event", [av.doId, TopToonsGlobals.CAT_BLDG, 1])
        avQuests = av.getQuests()
        questList = []
        zoneId = ZoneUtil.getBranchZone(zoneId)

        # Iterate through the avatars current quests.
        for i in xrange(0, len(avQuests), 5):
            questDesc = avQuests[i : i + 5]
            questClass = Quests.getQuest(questDesc[QuestIdIndex])
            if (
                isinstance(questClass, Quests.BuildingQuest)
                and questClass.getCompletionStatus(av, questDesc) == Quests.INCOMPLETE
            ):
                if questClass.isLocationMatch(zoneId) and questClass.doesBuildingTypeCount(type):
                    if questClass.isCogdo() == cogdo:
                        if floors >= questClass.getNumFloors():
                            questDesc[QuestProgressIndex] += 1
            questList.append(questDesc)

        av.b_setQuests(questList)
示例#55
0
    def enter(self, requestStatus):
        CogHQExterior.CogHQExterior.enter(self, requestStatus)
        # Load the CogHQ DNA file:
        dnaStore = DNAStorage()
        dnaFileName = self.genDNAFileName(self.zoneId)
        loadDNAFileAI(dnaStore, dnaFileName)

        # Collect all of the vis group zone IDs:
        self.zoneVisDict = {}
        for i in xrange(dnaStore.getNumDNAVisGroupsAI()):
            groupFullName = dnaStore.getDNAVisGroupName(i)
            visGroup = dnaStore.getDNAVisGroupAI(i)
            visZoneId = int(base.cr.hoodMgr.extractGroupName(groupFullName))
            visZoneId = ZoneUtil.getTrueZoneId(visZoneId, self.zoneId)
            visibles = []
            for i in xrange(visGroup.getNumVisibles()):
                visibles.append(int(visGroup.getVisible(i)))
            visibles.append(ZoneUtil.getBranchZone(visZoneId))
            self.zoneVisDict[visZoneId] = visibles

        # Next, we want interest in all vis groups due to this being a Cog HQ:
        base.cr.sendSetZoneMsg(self.zoneId, self.zoneVisDict.values()[0])
示例#56
0
    def enter(self, requestStatus):
        self.zoneId = requestStatus['zoneId']
        if self.zoneId != ToontownGlobals.LawbotOfficeExt and self.zoneId != ToontownGlobals.SellbotWestWing and self.zoneId not in ToontownGlobals.ShortWorkZones:
            dnaStore = DNAStorage()
            dnaFileName = self.genDNAFileName(self.zoneId)
            loadDNAFileAI(dnaStore, dnaFileName)
            self.zoneVisDict = {}
            for i in xrange(dnaStore.getNumDNAVisGroupsAI()):
                groupFullName = dnaStore.getDNAVisGroupName(i)
                visGroup = dnaStore.getDNAVisGroupAI(i)
                visZoneId = int(
                    base.cr.hoodMgr.extractGroupName(groupFullName))
                visZoneId = ZoneUtil.getTrueZoneId(visZoneId, self.zoneId)
                visibles = []
                for i in xrange(visGroup.getNumVisibles()):
                    visibles.append(int(visGroup.visibles[i]))

                visibles.append(ZoneUtil.getBranchZone(visZoneId))
                self.zoneVisDict[visZoneId] = visibles

            base.cr.sendSetZoneMsg(self.zoneId, self.zoneVisDict.values()[0])
        BattlePlace.BattlePlace.enter(self)
        self.fsm.enterInitialState()
        base.playMusic(self.loader.music, looping=1, volume=0.8)
        self.loader.geom.reparentTo(render)
        if self.loader.factGeom:
            self.loader.factGeom.reparentTo(render)
        self.nodeList = [self.loader.geom]
        self.loader.hood.startSky()
        self._telemLimiter = TLGatherAllAvs('FactoryExterior',
                                            RotationLimitToH)
        self.accept('doorDoneEvent', self.handleDoorDoneEvent)
        self.accept('DistributedDoor_doorTrigger', self.handleDoorTrigger)
        NametagGlobals.setMasterArrowsOn(1)
        self.tunnelOriginList = base.cr.hoodMgr.addLinkTunnelHooks(
            self, self.nodeList, self.zoneId)
        how = requestStatus['how']
        self.fsm.request(how, [requestStatus])
    def toonCaughtFishingItem(self, av, zoneId):
        # Get the avatars current quests.
        avQuests = av.getQuests()
        fishingItem = -1
        questList = []
        zoneId = ZoneUtil.getBranchZone(zoneId)

        # Iterate through their current quests.
        for i in range(0, len(avQuests), 5):
            questDesc = avQuests[i : i + 5]
            questClass = Quests.getQuest(questDesc[QuestIdIndex])
            if fishingItem != -1:
                questList.append(questDesc)
                continue

            if isinstance(questClass, Quests.RecoverItemQuest):
                if not hasattr(questClass, 'getItem'):
                    questList.append(questDesc)
                    continue

                # Check if we're in the correct zone for the task
                if questClass.isLocationMatch(zoneId):

                    if questClass.getHolder() == Quests.AnyFish:

                        if not questClass.getCompletionStatus(av, questDesc) == Quests.COMPLETE:
                            baseChance = questClass.getPercentChance()
                            amountRemaining = questClass.getNumItems() - questDesc[QuestProgressIndex]
                            chance = Quests.calcRecoverChance(amountRemaining, baseChance)

                            if chance >= baseChance:
                                questDesc[QuestProgressIndex] += 1
                                fishingItem = questClass.getItem()

            questList.append(questDesc)

        av.b_setQuests(questList)
        return fishingItem
示例#58
0
 def recoverItems(self, av, suits, zoneId):
     zoneId = ZoneUtil.getBranchZone(zoneId)
     
     quests = av.getQuests()
     newQuests = []
     
     recovered = []
     unrecovered = []
     
     for i in xrange(0, len(quests), 5):
         quest = quests[i:i + 5]
         klass = Quests.getQuest(quest[0])
         
         if klass.getCompletionStatus(av, quest) == Quests.INCOMPLETE:
             if isinstance(klass, Quests.RecoverItemQuest):
                 if klass.getHolder() != Quests.AnyFish:
                     item = klass.getItem()
                     
                     for suit in suits:
                         if klass.getCompletionStatus(av, quest) == Quests.COMPLETE:
                             break
                         
                         if klass.doesCogCount(av.doId, suit, zoneId, suit['activeToons']):
                             if random.random() <= klass.getPercentChance() / 100.0:
                                 quest[4] += 1
                                 recovered.append(item)
                                 
                             else:
                                 unrecovered.append(item)
                                 
                         else:
                             self.notify.debug("Recover: Suit %s at %s does not count" % (suit, zoneId))
                                 
         newQuests.append(quest)
         
     av.b_setQuests(newQuests)
     
     return recovered, unrecovered
 def begin(self, range, label, gui, tipCategory, zoneId):
     self.waitBar['range'] = range
     self.title['text'] = label
     if ToontownGlobals.BossbotHQ <= zoneId <= ToontownGlobals.LawbotHQ:
         self.title['text_font'] = ToontownGlobals.getSuitFont()
     else:
         self.title['text_font'] = ToontownGlobals.getSignFont()
     loadingScreenTex = self.zone2picture.get(ZoneUtil.getBranchZone(zoneId), self.defaultTex)
     self.background = loader.loadTexture(loadingScreenTex)
     self.__count = 0
     self.__expectedCount = range
     if gui:
         self.title.setPos(0, 0, 0.26)
         self.gui.setPos(0, -0.1, 0)
         self.gui.reparentTo(aspect2d, LOADING_SCREEN_SORT_INDEX)
         self.gui.setTexture(self.background, 1)
         if loadingScreenTex == self.defaultTex:
            self.logo.reparentTo(base.a2dpTopCenter, LOADING_SCREEN_SORT_INDEX)
     else:
         self.gui.reparentTo(hidden)
         self.logo.reparentTo(hidden)
     self.title.reparentTo(base.a2dpBottomCenter, LOADING_SCREEN_SORT_INDEX)
     self.waitBar.reparentTo(base.a2dpBottomCenter, LOADING_SCREEN_SORT_INDEX)
     self.waitBar.update(self.__count)
示例#60
0
    def update(self, questDesc):
        questId, fromNpcId, toNpcId, rewardId, toonProgress = questDesc
        quest = Quests.getQuest(questId)
        if quest == None:
            self.notify.warning('Tried to display poster for unknown quest %s' % questId)
            return
        if rewardId == Quests.NA:
            finalReward = Quests.getFinalRewardId(questId, fAll=1)
            transformedReward = Quests.transformReward(finalReward, base.localAvatar)
            reward = Quests.getReward(transformedReward)
        else:
            reward = Quests.getReward(rewardId)
        if reward and questId not in Quests.NoRewardTierZeroQuests:
            rewardString = reward.getPosterString()
        else:
            rewardString = ''
        self.rewardText['text'] = rewardString
        self.fitLabel(self.rewardText)
        if Quests.isQuestJustForFun(questId, rewardId):
            self.funQuest.show()
        else:
            self.funQuest.hide()
        if self._deleteCallback:
            self.showDeleteButton(questDesc)
        else:
            self.hideDeleteButton()
            
        fComplete = quest.getCompletionStatus(base.localAvatar, questDesc) == Quests.COMPLETE

        if Quests.isQuestJustForFun(questId, rewardId):
            if fComplete:
                self.funQuest.hide()
        
        if toNpcId == Quests.ToonHQ:
            toNpcName = TTLocalizer.QuestPosterHQOfficer
            toNpcBuildingName = TTLocalizer.QuestPosterHQBuildingName
            toNpcStreetName = TTLocalizer.QuestPosterHQStreetName
            toNpcLocationName = TTLocalizer.QuestPosterHQLocationName
            
        elif toNpcId == Quests.ToonTailor:
            toNpcName = TTLocalizer.QuestPosterTailor
            toNpcBuildingName = TTLocalizer.QuestPosterTailorBuildingName
            toNpcStreetName = TTLocalizer.QuestPosterTailorStreetName
            toNpcLocationName = TTLocalizer.QuestPosterTailorLocationName
            
        else:
            toNpcName = NPCToons.getNPCName(toNpcId)
            toNpcZone = NPCToons.getNPCZone(toNpcId)
            toNpcHoodId = ZoneUtil.getCanonicalHoodId(toNpcZone)
            toNpcLocationName = base.cr.hoodMgr.getFullnameFromId(toNpcHoodId)
            toNpcBuildingName = NPCToons.getBuildingTitle(toNpcZone)
            toNpcBranchId = ZoneUtil.getBranchZone(toNpcZone)
            toNpcStreetName = ZoneUtil.getStreetName(toNpcBranchId)
            
        lPos = Vec3(0, 0, 0.13)
        lIconGeom = None
        lIconGeomScale = 1
        rIconGeom = None
        rIconGeomScale = 1
        infoText = ''
        infoZ = TTLocalizer.QPinfoZ
        auxText = None
        auxTextPos = Vec3(0, 0, 0.12)
        headlineString = quest.getHeadlineString()
        objectiveStrings = quest.getObjectiveStrings()
        captions = map(lambda x: str(x).title(), quest.getObjectiveStrings())
        imageColor = Vec4(*self.colors['white'])
        if quest.getType() == Quests.DeliverGagQuest or quest.getType() == Quests.DeliverItemQuest:
            frameBgColor = 'red'
            
            if quest.getType() == Quests.DeliverGagQuest:
                invModel = loader.loadModel('phase_3.5/models/gui/inventory_icons')
                track, item = quest.getGagType()
                lIconGeom = invModel.find('**/' + AvPropsNew[track][item])
                invModel.removeNode()
                
            else:
                bookModel = loader.loadModel('phase_3.5/models/gui/stickerbook_gui')
                lIconGeom = bookModel.find('**/package')
                lIconGeomScale = 0.12
                bookModel.removeNode()
                
            if not fComplete:
                captions.append(toNpcName)
                auxText = TTLocalizer.QuestPosterAuxTo
                auxTextPos.setZ(0.12)
                lPos.setX(-0.18)
                infoText = TTLocalizer.QuestPageDestination % (toNpcBuildingName, toNpcStreetName, toNpcLocationName)
                rIconGeom = self.createNpcToonHead(toNpcId)
                rIconGeomScale = IMAGE_SCALE_SMALL
                
        elif quest.getType() == Quests.RecoverItemQuest:
            frameBgColor = 'green'
            bookModel = loader.loadModel('phase_3.5/models/gui/stickerbook_gui')
            lIconGeom = bookModel.find('**/package')
            lIconGeomScale = 0.12
            bookModel.removeNode()
            
            if not fComplete:
                rIconGeomScale = IMAGE_SCALE_SMALL
                holder = quest.getHolder()
                holderType = quest.getHolderType()
                
                if holder == Quests.Any:
                    cogIcons = loader.loadModel('phase_3/models/gui/cog_icons')
                    rIconGeom = cogIcons.find('**/cog')
                    cogIcons.removeNode()
                    lPos.setX(-0.18)
                    auxText = TTLocalizer.QuestPosterAuxFrom
                    
                elif holder == Quests.AnyFish:
                    headlineString = TTLocalizer.QuestPosterFishing
                    auxText = TTLocalizer.QuestPosterAuxFor
                    auxTextPos.setX(-0.18)
                    captions = captions[:1]
                    
                else:
                    if holderType == 'track':
                        cogIcons = loader.loadModel('phase_3/models/gui/cog_icons')
                        if holder == 'c':
                            icon = cogIcons.find('**/CorpIcon')
                        elif holder == 's':
                            icon = cogIcons.find('**/SalesIcon')
                        elif holder == 'l':
                            icon = cogIcons.find('**/LegalIcon')
                        elif holder == 'm':
                            icon = cogIcons.find('**/MoneyIcon')
                        rIconGeom = icon.copyTo(hidden)
                        rIconGeom.setColor(Suit.Suit.medallionColors[holder])
                        rIconGeomScale = 0.12
                        cogIcons.removeNode()
                        
                    elif holderType == 'level':
                        cogIcons = loader.loadModel('phase_3/models/gui/cog_icons')
                        rIconGeom = cogIcons.find('**/cog')
                        rIconGeomScale = IMAGE_SCALE_SMALL
                        cogIcons.removeNode()
                        
                    else:
                        rIconGeom = self.createSuitHead(holder)
                        
                    lPos.setX(-0.18)
                    auxText = TTLocalizer.QuestPosterAuxFrom
                    
                infoText = quest.getLocationName()
                if infoText == '':
                    infoText = TTLocalizer.QuestPosterAnywhere
                    
        elif quest.getType() == Quests.VisitQuest:
            frameBgColor = 'brown'
            captions[0] = '%s' % toNpcName
            lIconGeom = self.createNpcToonHead(toNpcId)
            lIconGeomScale = IMAGE_SCALE_SMALL
            
            if not fComplete:
                infoText = TTLocalizer.QuestPageDestination % (toNpcBuildingName, toNpcStreetName, toNpcLocationName)
                
        elif quest.getType() == Quests.TrackChoiceQuest:
            frameBgColor = 'green'
            invModel = loader.loadModel('phase_3.5/models/gui/inventory_icons')
            track1, track2 = quest.getChoices()
            lIconGeom = invModel.find('**/' + AvPropsNew[track1][1])
            
            if not fComplete:
                auxText = TTLocalizer.QuestPosterAuxOr
                lPos.setX(-0.18)
                rIconGeom = invModel.find('**/' + AvPropsNew[track2][1])
                infoText = TTLocalizer.QuestPageNameAndDestination % (toNpcName,
                 toNpcBuildingName,
                 toNpcStreetName,
                 toNpcLocationName)
                infoZ = -0.02
                
            invModel.removeNode()
            
        elif quest.getType() == Quests.BuildingQuest:
            frameBgColor = 'blue'
            track = quest.getBuildingTrack()
            numFloors = quest.getNumFloors()
            
            if track == 'c':
                lIconGeom = loader.loadModel('phase_4/models/modules/suit_landmark_corp')
                
            elif track == 'l':
                lIconGeom = loader.loadModel('phase_4/models/modules/suit_landmark_legal')
                
            elif track == 'm':
                lIconGeom = loader.loadModel('phase_4/models/modules/suit_landmark_money')
                
            elif track == 's':
                lIconGeom = loader.loadModel('phase_4/models/modules/suit_landmark_sales')
                
            else:
                bookModel = loader.loadModel('phase_3.5/models/gui/stickerbook_gui')
                lIconGeom = bookModel.find('**/COG_building')
                bookModel.removeNode()
                
            if lIconGeom and track != Quests.Any:
                self.loadElevator(lIconGeom, numFloors)
                lIconGeom.setH(180)
                self.fitGeometry(lIconGeom, fFlip=0)
                lIconGeomScale = IMAGE_SCALE_SMALL
                
            else:
                lIconGeomScale = 0.13
                
            if not fComplete:
                infoText = quest.getLocationName()
                if infoText == '':
                    infoText = TTLocalizer.QuestPosterAnywhere
                    
        # cogdo quest
        elif quest.getType() == Quests.CogdoQuest:
            frameBgColor = 'lightGreen'
            track = quest.getBuildingTrack()
            
            if track == 'c':
                lIconGeom = loader.loadModel('phase_4/models/modules/suit_landmark_corp')
                
            elif track == 'l':
                lIconGeom = loader.loadModel('phase_4/models/modules/suit_landmark_legal')
                    
            elif track == 'm':
                lIconGeom = loader.loadModel('phase_4/models/modules/suit_landmark_money')
                
            elif track == 's':
                lIconGeom = loader.loadModel('phase_4/models/modules/suit_landmark_sales')
                
            else:
                lIconGeom = loader.loadModel('phase_5/models/cogdominium/tt_m_ara_cbe_fieldOfficeMoverShaker')
                
            if lIconGeom and track != Quests.Any:
                lIconGeom.setH(180)
            
            else:
                lIconGeom.setH(180)
            
            self.fitGeometry(lIconGeom)
            lIconGeomScale = IMAGE_SCALE_SMALL
                            
            if not fComplete:
                infoText = quest.getLocationName()
                if infoText == '':
                    infoText = TTLocalizer.QuestPosterAnywhere
        
        elif quest.getType() == Quests.FactoryQuest:
            frameBgColor = 'blue'
            bookModel = loader.loadModel('phase_3.5/models/gui/stickerbook_gui')
            lIconGeom = bookModel.find('**/factoryIcon2')
            bookModel.removeNode()
            lIconGeomScale = 0.13
            if not fComplete:
                infoText = quest.getLocationName()
                if infoText == '':
                    infoText = TTLocalizer.QuestPosterAnywhere
        
        elif quest.getType() == Quests.MintQuest:
            frameBgColor = 'blue'
            bookModel = loader.loadModel('phase_3.5/models/gui/stickerbook_gui')
            lIconGeom = bookModel.find('**/CashBotMint')
            bookModel.removeNode()
            lIconGeomScale = 0.13
            if not fComplete:
                infoText = quest.getLocationName()
                if infoText == '':
                    infoText = TTLocalizer.QuestPosterAnywhere
        
        elif quest.getType() == Quests.ForemanQuest or quest.getType() == Quests.SupervisorQuest:
            frameBgColor = 'blue'
            bookModel = loader.loadModel('phase_3.5/models/gui/stickerbook_gui')
            lIconGeom = bookModel.find('**/skelecog5')
            bookModel.removeNode()
            lIconGeomScale = 0.13
            if not fComplete:
                infoText = quest.getLocationName()
                if infoText == '':
                    infoText = TTLocalizer.QuestPosterAnywhere
                    
        elif quest.getType() == Quests.BossQuest:
            frameBgColor = 'blue'
            cogIcons = loader.loadModel('phase_3/models/gui/cog_icons')
            lIconGeom = cogIcons.find('**/cog')
            lIconGeomScale = IMAGE_SCALE_SMALL
            cogIcons.removeNode()
            if not fComplete:
                infoText = quest.getLocationName()
                if infoText == '':
                    infoText = TTLocalizer.QuestPosterAnywhere
     
        elif quest.getType() == Quests.VPQuest:
            frameBgColor = 'blue'
            lIconGeom = loader.loadModel('phase_9/models/char/sellbotBoss-head-zero')
            lIconGeomPos = [0, 0, -0.055]
            lIconGeomHpr = [-90, 0, -90]
            lIconGeomScale = 0.015
            if not fComplete:
                infoText = quest.getLocationName()
                if infoText == '':
                    infoText = TTLocalizer.QuestPosterAnywhere
        
        elif quest.getType() == Quests.CFOQuest:
            frameBgColor = 'blue'
            lIconGeom = loader.loadModel('phase_10/models/char/cashbotBoss-head-zero')
            lIconGeomPos = [0, 0, -0.055]
            lIconGeomHpr = [90, 0, -90]
            lIconGeomScale = 0.015
            if not fComplete:
                infoText = quest.getLocationName()
                if infoText == '':
                    infoText = TTLocalizer.QuestPosterAnywhere
                    
        elif quest.getType() == Quests.CJQuest:
            frameBgColor = 'blue'
            lIconGeom = loader.loadModel('phase_11/models/char/lawbotBoss-head-zero')
            lIconGeomPos = [0, 0, -0.055]
            lIconGeomHpr = [90, 0, -90]
            lIconGeomScale = 0.025
            if not fComplete:
                infoText = quest.getLocationName()
                if infoText == '':
                    infoText = TTLocalizer.QuestPosterAnywhere
                    
        elif quest.getType() == Quests.CEOQuest:
            frameBgColor = 'blue'
            lIconGeom = loader.loadModel('phase_12/models/char/bossbotBoss-head-zero')
            lIconGeomPos = [0, 0, -0.065]
            lIconGeomHpr = [90, 0, -90]
            lIconGeomScale = 0.0125
            if not fComplete:
                infoText = quest.getLocationName()
                if infoText == '':
                    infoText = TTLocalizer.QuestPosterAnywhere
        
        elif 0:#quest.getType() == Quests.FriendQuest:
            frameBgColor = 'brown'
            gui = loader.loadModel('phase_3.5/models/gui/friendslist_gui')
            lIconGeom = gui.find('**/FriendsBox_Closed')
            lIconGeomScale = 0.45
            gui.removeNode()
            infoText = TTLocalizer.QuestPosterAnywhere
        
        elif quest.getType() == Quests.TrolleyQuest:
            frameBgColor = 'lightBlue'
            gui = loader.loadModel('phase_3.5/models/gui/stickerbook_gui')
            lIconGeom = gui.find('**/trolley')
            lIconGeomScale = 0.13
            gui.removeNode()
            infoText = TTLocalizer.QuestPosterPlayground
        
        elif quest.getType() == Quests.MailboxQuest:
            frameBgColor = 'lightBlue'
            bookModel = loader.loadModel('phase_3.5/models/gui/stickerbook_gui')
            lIconGeom = bookModel.find('**/package')
            lIconGeomScale = 0.12
            bookModel.removeNode()
            infoText = TTLocalizer.QuestPosterAtHome
        
        elif quest.getType() == Quests.PhoneQuest:
            frameBgColor = 'lightBlue'
            bookModel = loader.loadModel('phase_3.5/models/gui/stickerbook_gui')
            lIconGeom = bookModel.find('**/clarabelleCow')
            lIconGeomScale = 0.12
            bookModel.removeNode()
            infoText = TTLocalizer.QuestPosterOnPhone
            
        else:
            frameBgColor = 'blue'
            if quest.getType() == Quests.CogTrackQuest:
                dept = quest.getCogTrack()
                cogIcons = loader.loadModel('phase_3/models/gui/cog_icons')
                lIconGeomScale = 0.13
                if dept == 'c':
                    icon = cogIcons.find('**/CorpIcon')
                elif dept == 's':
                    icon = cogIcons.find('**/SalesIcon')
                elif dept == 'l':
                    icon = cogIcons.find('**/LegalIcon')
                elif dept == 'm':
                    icon = cogIcons.find('**/MoneyIcon')
                lIconGeom = icon.copyTo(hidden)
                lIconGeom.setColor(Suit.Suit.medallionColors[dept])
                cogIcons.removeNode()
                
            elif quest.getType() == Quests.CogQuest:
                if quest.getCogType() != Quests.Any:
                    lIconGeom = self.createSuitHead(quest.getCogType())
                    lIconGeomScale = IMAGE_SCALE_SMALL
                else:
                    cogIcons = loader.loadModel('phase_3/models/gui/cog_icons')
                    lIconGeom = cogIcons.find('**/cog')
                    lIconGeomScale = IMAGE_SCALE_SMALL
                    cogIcons.removeNode()
                    
            elif quest.getType() == Quests.CogLevelQuest:
                cogIcons = loader.loadModel('phase_3/models/gui/cog_icons')
                lIconGeom = cogIcons.find('**/cog')
                lIconGeomScale = IMAGE_SCALE_SMALL
                cogIcons.removeNode()
                
            elif quest.getType() == Quests.SkelecogTrackQuest:
                dept = quest.getCogTrack()
                cogIcons = loader.loadModel('phase_3/models/gui/cog_icons')
                lIconGeomScale = 0.13
                if dept == 'c':
                    icon = cogIcons.find('**/CorpIcon')
                elif dept == 's':
                    icon = cogIcons.find('**/SalesIcon')
                elif dept == 'l':
                    icon = cogIcons.find('**/LegalIcon')
                elif dept == 'm':
                    icon = cogIcons.find('**/MoneyIcon')
                lIconGeom = icon.copyTo(hidden)
                lIconGeom.setColor(Suit.Suit.medallionColors[dept])
                cogIcons.removeNode()
                
            elif quest.getType() == Quests.SkelecogQuest:
                cogIcons = loader.loadModel('phase_3.5/models/gui/stickerbook_gui')
                lIconGeom = cogIcons.find('**/skelecog5')
                lIconGeomScale = IMAGE_SCALE_SMALL
                cogIcons.removeNode()
                
            elif quest.getType() == Quests.SkelecogLevelQuest:
                cogIcons = loader.loadModel('phase_3.5/models/gui/stickerbook_gui')
                lIconGeom = cogIcons.find('**/skelecog5')
                lIconGeomScale = IMAGE_SCALE_SMALL
                cogIcons.removeNode()

            elif quest.getType() == Quests.SkeleReviveQuest:
                cogIcons = loader.loadModel('phase_3.5/models/gui/stickerbook_gui')
                lIconGeom = cogIcons.find('**/skelecog5')
                lIconGeomScale = IMAGE_SCALE_SMALL
                cogIcons.removeNode()
                
            if not fComplete:
                infoText = quest.getLocationName()
                if infoText == '':
                    infoText = TTLocalizer.QuestPosterAnywhere
                    
        if fComplete:
            textColor = (0, 0.3, 0, 1)
            imageColor = Vec4(*self.colors['lightGreen'])
            lPos.setX(-0.18)
            rIconGeom = self.createNpcToonHead(toNpcId)
            rIconGeomScale = IMAGE_SCALE_SMALL
            captions = captions[:1]
            captions.append(toNpcName)
            auxText = TTLocalizer.QuestPosterAuxReturnTo
            headlineString = TTLocalizer.QuestPosterComplete
            infoText = TTLocalizer.QuestPageDestination % (toNpcBuildingName, toNpcStreetName, toNpcLocationName)
            if self.laffMeter != None:
                self.laffMeter.reparentTo(hidden)
                self.laffMeter.destroy()
                self.laffMeter = None
        else:
            textColor = self.normalTextColor
            
        self.show()
        self['image_color'] = imageColor
        self.headline['text_fg'] = textColor
        self.headline['text'] = headlineString
        self.lPictureFrame.show()
        self.lPictureFrame.setPos(lPos)
        self.lPictureFrame['text_scale'] = TEXT_SCALE
        if lPos[0] != 0:
            self.lPictureFrame['text_scale'] = 0.0325
        self.lPictureFrame['text'] = captions[0]
        self.lPictureFrame['image_color'] = Vec4(*self.colors[frameBgColor])
        if len(captions) > 1:
            self.rPictureFrame.show()
            self.rPictureFrame['text'] = captions[1]
            self.rPictureFrame['text_scale'] = 0.0325
            self.rPictureFrame['image_color'] = Vec4(*self.colors[frameBgColor])
        else:
            self.rPictureFrame.hide()
        self._deleteGeoms()
        
        self.lQuestIcon['geom'] = lIconGeom
        self.lQuestIcon['geom_pos'] = (0, 10, 0)
            
        if lIconGeom:
            try:
                self.lQuestIcon['geom_scale'] = lIconGeomScale
            except:
                pass
            try:
                self.lQuestIcon['geom_pos'] = Point3(lIconGeomPos[0], lIconGeomPos[1], lIconGeomPos[2])
            except:
                pass
            try:
                self.lQuestIcon['geom_hpr'] = Point3(lIconGeomHpr[0], lIconGeomHpr[1], lIconGeomHpr[2])
            except:
                pass
            
        if self.laffMeter != None:
            self.laffMeter.reparentTo(self.lQuestIcon)
            
        self.rQuestIcon['geom'] = rIconGeom
        self.rQuestIcon['geom_pos'] = (0, 10, 0)
        if rIconGeom:
            self.rQuestIcon['geom_scale'] = rIconGeomScale
            
        if auxText:
            self.auxText.show()
            self.auxText['text'] = auxText
            self.auxText.setPos(auxTextPos)
        else:
            self.auxText.hide()
        self.bind(DGG.WITHIN, self.mouseEnterPoster)
        self.bind(DGG.WITHOUT, self.mouseExitPoster)
        numQuestItems = quest.getNumQuestItems()
        if fComplete or numQuestItems <= 1:
            self.questProgress.hide()
            if not quest.getType() == Quests.TrackChoiceQuest:
                infoZ = -0.075
        else:
            self.questProgress.show()
            self.questProgress['value'] = toonProgress & pow(2, 16) - 1
            self.questProgress['range'] = numQuestItems
            self.questProgress['text'] = quest.getProgressString(base.localAvatar, questDesc)
        self.questInfo['text'] = infoText
        self.questInfo.setZ(infoZ)
        self.fitLabel(self.questInfo)
        return