Ejemplo n.º 1
0
 def confirmJoinGroup(self, groupId, buttonTuple):
     doneStatus = self.joinDialog.doneStatus
     self.joinDialog.cleanup()
     del self.joinDialog
     if doneStatus is not 'ok':
         return
     for gid in base.cr.groupManager.id2type.keys():
         if base.cr.groupManager.isInGroup(base.localAvatar.doId, gid):
             self.rejectGroup(4)
             return
     #if len(base.cr.groupManager.getGroupPlayers(groupId)) >= 8:
     #    self.rejectGroup(3)
     #    return
     suitIdx = -1
     gids = {10000:0, 11000:1, 12000:2, 13000:3}
     suitIdx = gids.get(groupId)
     if suitIdx is not None:
         merits = base.localAvatar.cogMerits[suitIdx]
         if CogDisguiseGlobals.getTotalMerits(base.localAvatar, suitIdx) > merits:
             self.rejectGroup(2, suitIdx)
             return
         parts = base.localAvatar.getCogParts()
         if not CogDisguiseGlobals.isSuitComplete(parts, suitIdx):
             self.rejectGroup(1)
             return
     base.cr.groupManager.d_addPlayerToGroup(groupId, base.localAvatar.doId)
     self.currentGroupJoined = groupId
     try:
         place = base.cr.playGame.getPlace()
     except:
         try:
             place = base.cr.playGame.hood.loader.place
         except:
             place = base.cr.playGame.hood.place
     place.requestTeleport(groupId, groupId, base.localAvatar.defaultShard, -1)
Ejemplo n.º 2
0
    def updateMeritBars(self):
        if not self.meritBars:
            return

        for i in xrange(len(self.meritBars)):
            meritBar = self.meritBars[i]

            if CogDisguiseGlobals.isSuitComplete(base.localAvatar.cogParts, i):
                meritBar.show()
                totalMerits = CogDisguiseGlobals.getTotalMerits(base.localAvatar, i)
                merits = base.localAvatar.cogMerits[i]

                if totalMerits:
                    meritBar['range'] = totalMerits
                    meritBar['value'] = merits

                    if merits == totalMerits:
                        meritBar['text'] = TTLocalizer.RewardPanelMeritAlert
                    else:
                        meritBar['text'] = '%s/%s %s' % (merits, totalMerits, TTLocalizer.RewardPanelMeritBarLabels[i])
                else:
                    meritBar['range'] = 1
                    meritBar['value'] = 1
                    meritBar['text'] = TTLocalizer.RewardPanelMeritsMaxed
            else:
                meritBar.hide()
    def update(self):
        if not CogDisguiseGlobals.isSuitComplete(base.localAvatar.cogParts, self.deptIndex):
            self.progressBar['text'] = '%s %s' % (
                CogDisguiseGlobals.getPartCountAsString(base.localAvatar.cogParts, self.deptIndex),
                TTLocalizer.DisguiseParts)

            self.progressBar['range'] = CogDisguiseGlobals.PartsPerSuit[self.deptIndex]
            self.progressBar['value'] = CogDisguiseGlobals.getPartCount(base.localAvatar.cogParts, self.deptIndex)
            return

        promoStatus = base.localAvatar.promotionStatus[self.deptIndex]

        if promoStatus != ToontownGlobals.PendingPromotion:
            totalMerits = CogDisguiseGlobals.getTotalMerits(base.localAvatar, self.deptIndex)
            merits = base.localAvatar.cogMerits[self.deptIndex]

            self.progressBar['range'] = totalMerits
            self.progressBar['value'] = merits

            self.progressBar['text'] = '%s/%s %s' % (
            merits, totalMerits, TTLocalizer.RewardPanelMeritBarLabels[self.deptIndex])
        else:
            self.progressBar['range'] = 1
            self.progressBar['value'] = 1

            maxSuitLevel = (SuitDNA.levelsPerSuit - 1) + (SuitDNA.suitsPerDept - 1)
            if base.localAvatar.cogLevels[self.deptIndex] == maxSuitLevel:
                self.progressBar['text'] = TTLocalizer.RewardPanelMeritsMaxed
            else:
                self.progressBar['text'] = TTLocalizer.RewardPanelPromotionPending
Ejemplo n.º 4
0
 def getMeritIntervalList(self, toon, dept, origMerits, earnedMerits):
     tickDelay = 1.0 / 60
     intervalList = []
     totalMerits = CogDisguiseGlobals.getTotalMerits(toon, dept)
     neededMerits = 0
     if totalMerits and origMerits != totalMerits:
         neededMerits = totalMerits - origMerits
         intervalList.append(Func(self.showMeritIncLabel, dept, min(neededMerits, earnedMerits)))
     
     barTime = 0.5
     numTicks = int(math.ceil(barTime / tickDelay))
     for i in range(numTicks):
         t = (i + 1) / float(numTicks)
         newValue = int(origMerits + t * earnedMerits + 0.5)
         intervalList.append(Func(self.incrementMerits, toon, dept, newValue, totalMerits))
         intervalList.append(Wait(tickDelay))
     
     intervalList.append(Func(self.resetMeritBarColor, dept))
     intervalList.append(Wait(0.10000000000000001))
     if toon.cogLevels[dept] < ToontownGlobals.MaxCogSuitLevel:
         if neededMerits and toon.readyForPromotion(dept):
             intervalList.append(Wait(0.40000000000000002))
             intervalList += self.getPromotionIntervalList(toon, dept)
         
     
     return intervalList
    def __init__(self, cogMenu, dept):
        NodePath.__init__(self, 'CogMenuBar-%s' % dept)

        self.dept = dept
        self.deptIndex = CogDisguiseGlobals.dept2deptIndex(self.dept)

        icons = loader.loadModel('phase_3/models/gui/cog_icons')
        self.icon = icons.find(ICON_NODES[self.deptIndex]).copyTo(self)
        self.icon.setColor(ICON_COLORS[self.deptIndex])
        self.icon.setScale(0.07)
        self.icon.setX(-0.25)
        icons.removeNode()

        self.progressBar = DirectWaitBar(parent=self, relief=DirectGuiGlobals.SUNKEN,
                                         frameSize=(-1, 1, -0.15, 0.15),
                                         borderWidth=(0.02, 0.02),
                                         scale=0.20,
                                         frameColor=(DisguisePage.DeptColors[self.deptIndex][0] * 0.7,
                                                     DisguisePage.DeptColors[self.deptIndex][1] * 0.7,
                                                     DisguisePage.DeptColors[self.deptIndex][2] * 0.7,
                                                     1),
                                         barColor=(DisguisePage.DeptColors[self.deptIndex][0],
                                                   DisguisePage.DeptColors[self.deptIndex][1],
                                                   DisguisePage.DeptColors[self.deptIndex][2],
                                                   1),
                                         text='0/0 ' + TTLocalizer.RewardPanelMeritBarLabels[self.deptIndex],
                                         text_scale=TTLocalizer.RPmeritBarLabels, text_fg=(0, 0, 0, 1),
                                         text_align=TextNode.ALeft, text_pos=(-0.96, -0.05))

        self.reparentTo(cogMenu)
Ejemplo n.º 6
0
    def doTab(self, index):
        self.activeTab = index
        self.tabs[index].reparentTo(self.pageFrame)
        for i in range(len(self.tabs)):
            tab = self.tabs[i]
            if i == index:
                tab['text0_fg'] = (1, 0, 0, 1)
                tab['text2_fg'] = (1, 0, 0, 1)
            else:
                tab['text0_fg'] = (0, 0, 0, 1)
                tab['text2_fg'] = (0.5, 0.4, 0.4, 1)

        self.bkgd.setColor(DeptColors[index])
        self.deptLabel['text'] = (SuitDNA.suitDeptFullnames[SuitDNA.suitDepts[index]],)
        cogIndex = base.localAvatar.cogTypes[index] + SuitDNA.suitsPerDept * index
        cog = SuitDNA.suitHeadTypes[cogIndex]
        self.progressTitle.hide()
        if SuitDNA.suitDepts[index] == 'm':
            self.progressTitle = self.cogbuckTitle
        elif SuitDNA.suitDepts[index] == 'l':
            self.progressTitle = self.juryNoticeTitle
        elif SuitDNA.suitDepts[index] == 'c':
            self.progressTitle = self.stockOptionTitle
        else:
            self.progressTitle = self.meritTitle
        self.progressTitle.show()
        self.cogName['text'] = SuitBattleGlobals.SuitAttributes[cog]['name']
        cogLevel = base.localAvatar.cogLevels[index]
        self.cogLevel['text'] = TTLocalizer.DisguisePageCogLevel % str(cogLevel + 1)
        numParts = base.localAvatar.cogParts[index]
        numPartsRequired = CogDisguiseGlobals.PartsPerSuit[index]
        self.updatePartsDisplay(index, numParts, numPartsRequired)
        self.updateMeritBar(index)
        self.cogPartRatio['text'] = '%d/%d' % (CogDisguiseGlobals.getTotalParts(numParts), numPartsRequired)
        def dbCallback(dclass, fields, toonId=toonId, suitDeptIndex=suitDeptIndex):
            if dclass != self.air.dclassesByName['DistributedToonAI']:
                return

            parts = fields['setCogParts'][0]
            if CogDisguiseGlobals.isSuitComplete(parts, suitDeptIndex):
                # Code from DistributedToonAI.loseCogParts:
                loseCount = random.randrange(CogDisguiseGlobals.MinPartLoss,
                                             CogDisguiseGlobals.MaxPartLoss+1)

                partBitmask = parts[suitDeptIndex]
                partList = range(17)

                while loseCount > 0 and partList:
                    losePart = random.choice(partList)
                    partList.remove(losePart)

                    losePartBit = 1 << losePart
                    if partBitmask & losePartBit:
                        partBitmask &= ~losePartBit
                        loseCount -= 1

                parts[suitDeptIndex] = partBitmask

                # Update the cog parts in the db:
                self.air.dbInterface.updateObject(
                    self.air.dbId, toonId,
                    self.air.dclassesByName['DistributedToonAI'],
                    {'setCogParts': (parts,)}
                )
Ejemplo n.º 8
0
 def getNextMeritValue(self, curMerits, toon, dept):
     totalMerits = CogDisguiseGlobals.getTotalMerits(toon, dept)
     retVal = totalMerits
     if curMerits > totalMerits:
         retVal = amount
     
     return retVal
Ejemplo n.º 9
0
 def recoverPart(self, toon, factoryType, suitTrack, zoneId, toons):
     recoveredParts = [0, 0, 0, 0]
     parts = toon.getCogParts()
     suitTrack = suitTrackIndex[suitTrack]
     if CogDisguiseGlobals.isSuitComplete(parts, suitTrack):
         return recoveredParts
     recoveredParts[suitTrack] = toon.giveGenericCogPart(factoryType, suitTrack)
     return recoveredParts
Ejemplo n.º 10
0
 def recoverMerits(self, av, cogList, zoneId, multiplier = 1, extraMerits = None):
     avId = av.getDoId()
     meritsRecovered = [0, 0, 0, 0]
     if extraMerits is None:
         extraMerits = [0, 0, 0, 0]
     if self.air.suitInvasionManager.getInvading():
         multiplier *= getInvasionMultiplier()
     for i in xrange(len(extraMerits)):
         if CogDisguiseGlobals.isSuitComplete(av.getCogParts(), i):
             meritsRecovered[i] += extraMerits[i]
             self.notify.debug('recoverMerits: extra merits = %s' % extraMerits[i])
     self.notify.debug('recoverMerits: multiplier = %s' % multiplier)
     for cogDict in cogList:
         dept = SuitDNA.suitDepts.index(cogDict['track'])
         if avId in cogDict['activeToons']:
             if CogDisguiseGlobals.isSuitComplete(av.getCogParts(), SuitDNA.suitDepts.index(cogDict['track'])):
                 self.notify.debug('recoverMerits: checking against cogDict: %s' % cogDict)
                 rand = random.random() * 100
                 if rand <= self.getPercentChance() and not cogDict['isVirtual']:
                     merits = cogDict['level'] * MeritMultiplier
                     merits = int(round(merits))
                     if cogDict['hasRevives']:
                         merits *= 2
                     merits = merits * multiplier
                     merits = int(round(merits))
                     meritsRecovered[dept] += merits
                     self.notify.debug('recoverMerits: merits = %s' % merits)
                 else:
                     self.notify.debug('recoverMerits: virtual cog!')
     if meritsRecovered != [0, 0, 0, 0]:
         actualCounted = [0, 0, 0, 0]
         merits = av.getCogMerits()
         for i in xrange(len(meritsRecovered)):
             max = CogDisguiseGlobals.getTotalMerits(av, i)
             if max:
                 if merits[i] + meritsRecovered[i] <= max:
                     actualCounted[i] = meritsRecovered[i]
                     merits[i] += meritsRecovered[i]
                 else:
                     actualCounted[i] = max - merits[i]
                     merits[i] = max
                 av.b_setCogMerits(merits)
         if reduce(lambda x, y: x + y, actualCounted):
             self.air.writeServerEvent('merits', avId, '%s|%s|%s|%s' % tuple(actualCounted))
             self.notify.debug('recoverMerits: av %s recovered merits %s' % (avId, actualCounted))
     return meritsRecovered
 def __talkAboutPromotion(self, speech):
     if self.prevCogSuitLevel < ToontownGlobals.MaxCogSuitLevel:
         newCogSuitLevel = localAvatar.getCogLevels()[CogDisguiseGlobals.dept2deptIndex(self.style.dept)]
         if newCogSuitLevel == ToontownGlobals.MaxCogSuitLevel:
             speech += TTLocalizer.ResistanceToonLastPromotion % (ToontownGlobals.MaxCogSuitLevel + 1)
         if newCogSuitLevel in ToontownGlobals.CogSuitHPLevels:
             speech += TTLocalizer.ResistanceToonHPBoost
     else:
         speech += TTLocalizer.ResistanceToonMaxed % (ToontownGlobals.MaxCogSuitLevel + 1)
     return speech
 def announceGenerate(self):
     DistributedAvatar.DistributedAvatar.announceGenerate(self)
     self.prevCogSuitLevel = localAvatar.getCogLevels()[CogDisguiseGlobals.dept2deptIndex(self.style.dept)]
     nearBubble = CollisionSphere(0, 0, 0, 50)
     nearBubble.setTangible(0)
     nearBubbleNode = CollisionNode('NearBoss')
     nearBubbleNode.setCollideMask(ToontownGlobals.WallBitmask)
     nearBubbleNode.addSolid(nearBubble)
     self.attachNewNode(nearBubbleNode)
     self.accept('enterNearBoss', self.avatarNearEnter)
     self.accept('exitNearBoss', self.avatarNearExit)
     self.collNode.removeSolid(0)
     tube1 = CollisionTube(6.5, -7.5, 2, 6.5, 7.5, 2, 2.5)
     tube2 = CollisionTube(-6.5, -7.5, 2, -6.5, 7.5, 2, 2.5)
     roof = CollisionPolygon(Point3(-4.4, 7.1, 5.5), Point3(-4.4, -7.1, 5.5), Point3(4.4, -7.1, 5.5), Point3(4.4, 7.1, 5.5))
     side1 = CollisionPolygon(Point3(-4.4, -7.1, 5.5), Point3(-4.4, 7.1, 5.5), Point3(-4.4, 7.1, 0), Point3(-4.4, -7.1, 0))
     side2 = CollisionPolygon(Point3(4.4, 7.1, 5.5), Point3(4.4, -7.1, 5.5), Point3(4.4, -7.1, 0), Point3(4.4, 7.1, 0))
     front1 = CollisionPolygon(Point3(4.4, -7.1, 5.5), Point3(-4.4, -7.1, 5.5), Point3(-4.4, -7.1, 5.2), Point3(4.4, -7.1, 5.2))
     back1 = CollisionPolygon(Point3(-4.4, 7.1, 5.5), Point3(4.4, 7.1, 5.5), Point3(4.4, 7.1, 5.2), Point3(-4.4, 7.1, 5.2))
     self.collNode.addSolid(tube1)
     self.collNode.addSolid(tube2)
     self.collNode.addSolid(roof)
     self.collNode.addSolid(side1)
     self.collNode.addSolid(side2)
     self.collNode.addSolid(front1)
     self.collNode.addSolid(back1)
     self.collNodePath.reparentTo(self.axle)
     self.collNode.setCollideMask(ToontownGlobals.PieBitmask | ToontownGlobals.WallBitmask | ToontownGlobals.CameraBitmask)
     self.collNode.setName('BossZap')
     self.setTag('attackCode', str(ToontownGlobals.BossCogElectricFence))
     self.accept('enterBossZap', self.__touchedBoss)
     bubbleL = CollisionSphere(10, -5, 0, 10)
     bubbleL.setTangible(0)
     bubbleLNode = CollisionNode('BossZap')
     bubbleLNode.setCollideMask(ToontownGlobals.WallBitmask)
     bubbleLNode.addSolid(bubbleL)
     self.bubbleL = self.axle.attachNewNode(bubbleLNode)
     self.bubbleL.setTag('attackCode', str(ToontownGlobals.BossCogSwatLeft))
     self.bubbleL.stash()
     bubbleR = CollisionSphere(-10, -5, 0, 10)
     bubbleR.setTangible(0)
     bubbleRNode = CollisionNode('BossZap')
     bubbleRNode.setCollideMask(ToontownGlobals.WallBitmask)
     bubbleRNode.addSolid(bubbleR)
     self.bubbleR = self.axle.attachNewNode(bubbleRNode)
     self.bubbleR.setTag('attackCode', str(ToontownGlobals.BossCogSwatRight))
     self.bubbleR.stash()
     bubbleF = CollisionSphere(0, -25, 0, 12)
     bubbleF.setTangible(0)
     bubbleFNode = CollisionNode('BossZap')
     bubbleFNode.setCollideMask(ToontownGlobals.WallBitmask)
     bubbleFNode.addSolid(bubbleF)
     self.bubbleF = self.rotateNode.attachNewNode(bubbleFNode)
     self.bubbleF.setTag('attackCode', str(ToontownGlobals.BossCogFrontAttack))
     self.bubbleF.stash()
Ejemplo n.º 13
0
    def changeMeritBars(self, hide):
        if not self.meritBars:
            return

        for i in xrange(len(self.meritBars)):
            meritBar = self.meritBars[i]

            if CogDisguiseGlobals.isSuitComplete(base.localAvatar.cogParts, i):
                meritBar.hide() if hide else meritBar.show()
            else:
                meritBar.hide()
Ejemplo n.º 14
0
 def recoverMerits(self, toon, suitsKilled, zoneId, mult = 1, extraMerits = None):
     if 1: #extraMerits is None:
         extraMerits = [0, 0, 0, 0]
         
     #else:
         # extraMerits = [0, extraMerits, 0, 0]
     
     # to do: figure out which track we should add extra merits to (check zoneId?)
         
     amounts = {x: y for x, y in zip(SuitDNA.suitDepts, extraMerits)}
     parts = toon.getCogParts()
     
     # calc
     for suit in suitsKilled:
         if suit['isVirtual']:
             continue
             
         track, level = suit['track'], suit['level']
         deptIdx = SuitDNA.suitDepts.index(track)
         if not CogDisguiseGlobals.isSuitComplete(parts, deptIdx):
             continue
         
         mult = (2 if self.air.suitInvasionManager.hasInvading() else 1)
         mult *= int(suit['hasRevives']) + 1
             
         amount = int((level + 1) / 2 * mult) * mult
         amounts[track] += amount
         
     merits = toon.getCogMerits()
     am2 = [0, 0, 0, 0]
     
     for dept, value in amounts.items():
         dept = SuitDNA.suitDepts.index(dept)
         needed = max(0, CogDisguiseGlobals.getTotalMerits(toon, dept) - merits[dept])
         am2[dept] = min(needed, value)
         
     # apply
     toon.b_setCogMerits([x + y for x, y in zip(merits, am2)])
     
     return am2
     
Ejemplo n.º 15
0
 def updateMeritBar(self, dept):
     merits = base.localAvatar.cogMerits[dept]
     totalMerits = CogDisguiseGlobals.getTotalMerits(base.localAvatar, dept)
     if totalMerits == 0:
         progress = 1
     else:
         progress = min(merits / float(totalMerits), 1)
     self.updateMeritDial(progress)
     if base.localAvatar.readyForPromotion(dept):
         self.cogMeritRatio['text'] = TTLocalizer.DisguisePageMeritFull
         self.promotionTitle.show()
         self.progressTitle.hide()
     else:
         self.cogMeritRatio['text'] = '%d/%d' % (merits, totalMerits)
         self.promotionTitle.hide()
         self.progressTitle.show()
Ejemplo n.º 16
0
 def __talkAboutPromotion(self, speech):
     if self.prevCogSuitLevel < ToontownGlobals.MaxCogSuitLevel:
         deptIndex = CogDisguiseGlobals.dept2deptIndex(self.style.dept)
         cogLevels = base.localAvatar.getCogLevels()
         newCogSuitLevel = cogLevels[deptIndex]
         cogTypes = base.localAvatar.getCogTypes()
         maxCogSuitLevel = (SuitDNA.levelsPerSuit-1) + cogTypes[deptIndex]
         if self.prevCogSuitLevel != maxCogSuitLevel:
             speech += TTLocalizer.ResistanceToonLevelPromotion
         if newCogSuitLevel == maxCogSuitLevel:
             if newCogSuitLevel != ToontownGlobals.MaxCogSuitLevel:
                 suitIndex = (SuitDNA.suitsPerDept*deptIndex) + cogTypes[deptIndex]
                 cogTypeStr = SuitDNA.suitHeadTypes[suitIndex]
                 cogName = SuitBattleGlobals.SuitAttributes[cogTypeStr]['name']
                 speech += TTLocalizer.ResistanceToonSuitPromotion % cogName
     else:
         speech += TTLocalizer.ResistanceToonMaxed % (ToontownGlobals.MaxCogSuitLevel + 1)
     return speech
Ejemplo n.º 17
0
 def doTab(self, index):
     self.activeTab = index
     self.tabs[index].reparentTo(self.pageFrame)
     # update the tab buttons
     for i in range(len(self.tabs)):
         tab = self.tabs[i]
         if i == index:
             tab['text0_fg'] = (1, 0, 0, 1)
             tab['text2_fg'] = (1, 0, 0, 1)
         else:
             tab['text0_fg'] = (0, 0, 0, 1)
             tab['text2_fg'] = (0.5, 0.4, 0.4, 1)
     # Set background color
     self.bkgd.setColor(DeptColors[index])
     # Update the label
     self.deptLabel['text'] = SuitDNA.suitDeptFullnames[
         SuitDNA.suitDepts[index]],
     # determine the offset in head array for this dept
     cogIndex = (base.localAvatar.cogTypes[index] +
                 (SuitDNA.suitsPerDept * index))
     cog = SuitDNA.suitHeadTypes[cogIndex]
     # update the gui
     self.progressTitle.hide()
     if SuitDNA.suitDepts[index] == 'm':
         self.progressTitle = self.cogbuckTitle
     elif SuitDNA.suitDepts[index] == 'l':
         self.progressTitle = self.juryNoticeTitle
     elif SuitDNA.suitDepts[index] == 'c':
         self.progressTitle = self.stockOptionTitle
     else:
         self.progressTitle = self.meritTitle
     self.progressTitle.show()
     self.cogName['text'] = SuitBattleGlobals.SuitAttributes[cog]['name']
     cogLevel = base.localAvatar.cogLevels[index]
     self.cogLevel['text'] = (TTLocalizer.DisguisePageCogLevel %
                              str(cogLevel + 1))
     numParts = base.localAvatar.cogParts[index]
     numPartsRequired = CogDisguiseGlobals.PartsPerSuit[index]
     self.updatePartsDisplay(index, numParts, numPartsRequired)
     self.updateMeritBar(index)
     self.cogPartRatio['text'] = (
         "%d/%d" %
         (CogDisguiseGlobals.getTotalParts(numParts), numPartsRequired))
    def removeParts(self, toonId, suitDeptIndex):
        toon = self.air.doId2do.get(toonId)

        # Check if the toon is in our doId2do:
        if toon is not None:
            parts = toon.getCogParts()
            if CogDisguiseGlobals.isSuitComplete(parts, suitDeptIndex):
                toon.loseCogParts(suitDeptIndex)

        def dbCallback(dclass, fields, toonId=toonId, suitDeptIndex=suitDeptIndex):
            if dclass != self.air.dclassesByName['DistributedToonAI']:
                return

            parts = fields['setCogParts'][0]
            if CogDisguiseGlobals.isSuitComplete(parts, suitDeptIndex):
                # Code from DistributedToonAI.loseCogParts:
                loseCount = random.randrange(CogDisguiseGlobals.MinPartLoss,
                                             CogDisguiseGlobals.MaxPartLoss+1)

                partBitmask = parts[suitDeptIndex]
                partList = range(17)

                while loseCount > 0 and partList:
                    losePart = random.choice(partList)
                    partList.remove(losePart)

                    losePartBit = 1 << losePart
                    if partBitmask & losePartBit:
                        partBitmask &= ~losePartBit
                        loseCount -= 1

                parts[suitDeptIndex] = partBitmask

                # Update the cog parts in the db:
                self.air.dbInterface.updateObject(
                    self.air.dbId, toonId,
                    self.air.dclassesByName['DistributedToonAI'],
                    {'setCogParts': (parts,)}
                )

        # It doesn't look like the toon was in our doId2do. Lets query the db:
        self.air.dbInterface.queryObject(self.air.dbId, toonId, dbCallback)
Ejemplo n.º 19
0
 def requestEnter(self):
     avatarId = self.air.getAvatarIdFromSender()
     dept = ToontownGlobals.cogHQZoneId2deptIndex(self.destinationZone)
     av = self.air.doId2do.get(avatarId)
     if av:
         if self.doorType == DoorTypes.EXT_COGHQ and self.isLockedDoor():
             parts = av.getCogParts()
             if CogDisguiseGlobals.isSuitComplete(parts, dept):
                 allowed = 1
             else:
                 allowed = 0
         else:
             allowed = 1
         if not allowed:
             self.sendReject(avatarId, self.isLockedDoor())
             return
         self.enqueueAvatarIdEnter(avatarId)
         self.sendUpdateToAvatarId(
             avatarId, 'setOtherZoneIdAndDoId',
             [self.destinationZone,
              self.otherDoor.getDoId()])
Ejemplo n.º 20
0
 def __talkAboutPromotion(self, speech):
     if self.prevCogSuitLevel < ToontownGlobals.MaxCogSuitLevel:
         deptIndex = CogDisguiseGlobals.dept2deptIndex(self.style.dept)
         cogLevels = base.localAvatar.getCogLevels()
         newCogSuitLevel = cogLevels[deptIndex]
         cogTypes = base.localAvatar.getCogTypes()
         maxCogSuitLevel = (SuitDNA.levelsPerSuit - 1) + cogTypes[deptIndex]
         if self.prevCogSuitLevel != maxCogSuitLevel:
             speech += TTLocalizer.ResistanceToonLevelPromotion
         if newCogSuitLevel == maxCogSuitLevel:
             if newCogSuitLevel != ToontownGlobals.MaxCogSuitLevel:
                 suitIndex = (SuitDNA.suitsPerDept *
                              deptIndex) + cogTypes[deptIndex]
                 cogTypeStr = SuitDNA.suitHeadTypes[suitIndex]
                 cogName = SuitBattleGlobals.SuitAttributes[cogTypeStr][
                     'name']
                 speech += TTLocalizer.ResistanceToonSuitPromotion % cogName
     else:
         speech += TTLocalizer.ResistanceToonMaxed % (
             ToontownGlobals.MaxCogSuitLevel + 1)
     return speech
Ejemplo n.º 21
0
    def doTab(self, index):
        self.activeTab = index
        self.tabs[index].reparentTo(self.pageFrame)
        for i in range(len(self.tabs)):
            tab = self.tabs[i]
            if i == index:
                tab['text0_fg'] = (1, 0, 0, 1)
                tab['text2_fg'] = (1, 0, 0, 1)
                continue
            tab['text0_fg'] = (0, 0, 0, 1)
            tab['text2_fg'] = (0.5, 0.40000000000000002, 0.40000000000000002,
                               1)

        self.bkgd.setColor(DeptColors[index])
        self.deptLabel['text'] = (
            SuitDNA.suitDeptFullnames[SuitDNA.suitDepts[index]], )
        cogIndex = base.localAvatar.cogTypes[
            index] + SuitDNA.suitsPerDept * index
        cog = SuitDNA.suitHeadTypes[cogIndex]
        self.progressTitle.hide()
        if SuitDNA.suitDepts[index] == 'm':
            self.progressTitle = self.cogbuckTitle
        elif SuitDNA.suitDepts[index] == 'l':
            self.progressTitle = self.juryNoticeTitle
        elif SuitDNA.suitDepts[index] == 'c':
            self.progressTitle = self.stockOptionTitle
        else:
            self.progressTitle = self.meritTitle
        self.progressTitle.show()
        self.cogName['text'] = SuitBattleGlobals.SuitAttributes[cog]['name']
        cogLevel = base.localAvatar.cogLevels[index]
        self.cogLevel['text'] = TTLocalizer.DisguisePageCogLevel % str(
            cogLevel + 1)
        numParts = base.localAvatar.cogParts[index]
        numPartsRequired = CogDisguiseGlobals.PartsPerSuit[index]
        self.updatePartsDisplay(index, numParts, numPartsRequired)
        self.updateMeritBar(index)
        self.cogPartRatio['text'] = '%d/%d' % (
            CogDisguiseGlobals.getTotalParts(numParts), numPartsRequired)
Ejemplo n.º 22
0
    def getMeritIntervalList(self, toon, dept, origMerits, earnedMerits):
        """
        returns a list of intervals that, if played, will show merits
        gained for the given dept.
        """
        tickDelay = 0.08
        intervalList = []
        totalMerits = CogDisguiseGlobals.getTotalMerits(toon, dept)
        neededMerits = 0

        # Only show the inc value if we are not maxed
        if totalMerits and (origMerits != totalMerits):
            neededMerits = totalMerits - origMerits
            intervalList.append(
                Func(self.showMeritIncLabel, dept,
                     min(neededMerits, earnedMerits)))

        # How much time should it take to increment the bar?
        barTime = math.log(earnedMerits + 1)
        numTicks = int(math.ceil(barTime / tickDelay))

        for i in range(numTicks):
            t = (i + 1) / float(numTicks)
            newValue = int(origMerits + t * earnedMerits + 0.5)
            intervalList.append(
                Func(self.incrementMerits, toon, dept, newValue, totalMerits))
            intervalList.append(Wait(tickDelay))

        intervalList.append(Func(self.resetMeritBarColor, dept))
        intervalList.append(Wait(0.4))

        # we don't need a promotion if we've reach level 50
        if (toon.cogLevels[dept] < ToontownGlobals.MaxCogSuitLevel):
            if neededMerits and toon.readyForPromotion(dept):
                intervalList.append(Wait(0.4))
                intervalList += self.getPromotionIntervalList(toon, dept)

        return intervalList
Ejemplo n.º 23
0
    def getMeritIntervalList(self, toon, dept, origMerits, earnedMerits):
        tickDelay = 1.0 / 60
        intervalList = []
        totalMerits = CogDisguiseGlobals.getTotalMerits(toon, dept)
        neededMerits = 0
        if totalMerits and origMerits != totalMerits:
            neededMerits = totalMerits - origMerits
            intervalList.append(Func(self.showMeritIncLabel, dept, min(neededMerits, earnedMerits)))
        barTime = 0.5
        numTicks = int(math.ceil(barTime / tickDelay))
        for i in range(numTicks):
            t = (i + 1) / float(numTicks)
            newValue = int(origMerits + t * earnedMerits + 0.5)
            intervalList.append(Func(self.incrementMerits, toon, dept, newValue, totalMerits))
            intervalList.append(Wait(tickDelay))

        intervalList.append(Func(self.resetMeritBarColor, dept))
        intervalList.append(Wait(0.1))
        if toon.cogLevels[dept] < ToontownGlobals.MaxCogSuitLevel:
            if neededMerits and toon.readyForPromotion(dept):
                intervalList.append(Wait(0.4))
                intervalList += self.getPromotionIntervalList(toon, dept)
        return intervalList
Ejemplo n.º 24
0
 def getCogPartIntervalList(self, toon, cogPartList):
     itemName = CogDisguiseGlobals.getPartName(cogPartList)
     intervalList = []
     intervalList.append(Func(self.cogPartLabel.setProp, 'text', itemName))
     intervalList.append(Wait(1))
     return intervalList
Ejemplo n.º 25
0
    def initGagFrame(self, toon, expList, meritList, noSkip=False):
        self.avNameLabel['text'] = toon.getName()
        self.endTrackFrame.hide()
        self.gagExpFrame.show()
        self.newGagFrame.hide()
        self.promotionFrame.hide()
        self.questFrame.hide()
        self.itemFrame.hide()
        self.cogPartFrame.hide()
        self.missedItemFrame.hide()
        trackBarOffset = 0
        self.skipButton['state'] = choice(noSkip, DGG.DISABLED, DGG.NORMAL)
        for i in xrange(len(SuitDNA.suitDepts)):
            meritBar = self.meritBars[i]
            meritLabel = self.meritLabels[i]
            totalMerits = CogDisguiseGlobals.getTotalMerits(toon, i)
            merits = meritList[i]
            self.meritIncLabels[i].hide()
            promoStatus = toon.promotionStatus[i]
            if CogDisguiseGlobals.isSuitComplete(toon.cogParts, i):
                if not self.trackBarsOffset:
                    trackBarOffset = 0.47
                    self.trackBarsOffset = 1
                meritBar.show()
                meritLabel.show()
                meritLabel.show()
                if totalMerits:
                    meritBar['range'] = totalMerits
                    meritBar['value'] = merits
                    if promoStatus != ToontownGlobals.PendingPromotion:
                        meritBar['text'] = '%s/%s %s' % (
                            merits, totalMerits,
                            TTLocalizer.RewardPanelMeritBarLabels[i])
                maxSuitType = SuitDNA.suitsPerDept - 1
                maxSuitLevel = (SuitDNA.levelsPerSuit - 1) + maxSuitType
                if toon.cogLevels[i] == maxSuitLevel:
                    if promoStatus == ToontownGlobals.PendingPromotion:
                        meritBar['range'] = 1
                        meritBar['value'] = 1
                        meritBar['text'] = TTLocalizer.RewardPanelMeritsMaxed
                elif promoStatus == ToontownGlobals.PendingPromotion:
                    meritBar['range'] = 1
                    meritBar['value'] = 1
                    meritBar['text'] = TTLocalizer.RewardPanelPromotionPending
                self.resetMeritBarColor(i)
            else:
                meritBar.hide()
                meritLabel.hide()

        for i in xrange(len(expList)):
            curExp = expList[i]
            trackBar = self.trackBars[i]
            trackLabel = self.trackLabels[i]
            trackIncLabel = self.trackIncLabels[i]
            trackBar.setX(trackBar.getX() - trackBarOffset)
            trackLabel.setX(trackLabel.getX() - trackBarOffset)
            trackIncLabel.setX(trackIncLabel.getX() - trackBarOffset)
            trackIncLabel.hide()
            if toon.hasTrackAccess(i):
                trackBar.show()
                if curExp >= ToontownBattleGlobals.UnpaidMaxSkills[
                        i] and toon.getGameAccess() != OTPGlobals.AccessFull:
                    nextExp = self.getNextExpValue(curExp, i)
                    trackBar['range'] = nextExp
                    trackBar['value'] = ToontownBattleGlobals.UnpaidMaxSkills[
                        i]
                    trackBar['text'] = TTLocalizer.InventoryGuestExp
                elif curExp >= ToontownBattleGlobals.regMaxSkill:
                    nextExp = self.getNextExpValueUber(curExp, i)
                    trackBar['range'] = nextExp
                    uberCurrExp = curExp - ToontownBattleGlobals.regMaxSkill
                    trackBar['value'] = uberCurrExp
                    trackBar['text'] = TTLocalizer.InventoryUberTrackExp % {
                        'nextExp': ToontownBattleGlobals.MaxSkill - curExp
                    }
                else:
                    nextExp = self.getNextExpValue(curExp, i)
                    trackBar['range'] = nextExp
                    trackBar['value'] = curExp
                    trackBar['text'] = '%s/%s' % (curExp, nextExp)
                self.resetBarColor(i)
            else:
                trackBar.hide()
Ejemplo n.º 26
0
 def getNextMeritValue(self, curMerits, toon, dept):
     totalMerits = CogDisguiseGlobals.getTotalMerits(toon, dept)
     retVal = totalMerits
     if curMerits > totalMerits:
         retVal = amount
     return retVal
Ejemplo n.º 27
0
 def removeParts(self, toon, suitDept):
     parts = toon.getCogParts()
     if CogDisguiseGlobals.isSuitComplete(parts, suitDept):
         toon.loseCogParts(suitDept)
Ejemplo n.º 28
0
 def getCogPartIntervalList(self, toon, cogPartList):
     itemName = CogDisguiseGlobals.getPartName(cogPartList)
     intervalList = []
     intervalList.append(Func(self.cogPartLabel.setProp, 'text', itemName))
     intervalList.append(Wait(1))
     return intervalList
Ejemplo n.º 29
0
    def initGagFrame(self, toon, expList, meritList, noSkip = False):
        self.avNameLabel['text'] = toon.getName()
        self.endTrackFrame.hide()
        self.gagExpFrame.show()
        self.newGagFrame.hide()
        self.promotionFrame.hide()
        self.questFrame.hide()
        self.itemFrame.hide()
        self.cogPartFrame.hide()
        self.missedItemFrame.hide()
        trackBarOffset = 0
        self.skipButton['state'] = choice(noSkip, DGG.DISABLED, DGG.NORMAL)
        for i in xrange(len(SuitDNA.suitDepts)):
            meritBar = self.meritBars[i]
            meritLabel = self.meritLabels[i]
            totalMerits = CogDisguiseGlobals.getTotalMerits(toon, i)
            merits = meritList[i]
            self.meritIncLabels[i].hide()
            if CogDisguiseGlobals.isSuitComplete(toon.cogParts, i):
                if not self.trackBarsOffset:
                    trackBarOffset = 0.47
                    self.trackBarsOffset = 1
                meritBar.show()
                meritLabel.show()
                meritLabel.show()
                if totalMerits:
                    meritBar['range'] = totalMerits
                    meritBar['value'] = merits
                    if merits == totalMerits:
                        meritBar['text'] = TTLocalizer.RewardPanelMeritAlert
                    else:
                        meritBar['text'] = '%s/%s %s' % (merits, totalMerits, TTLocalizer.RewardPanelMeritBarLabels[i])
                else:
                    meritBar['range'] = 1
                    meritBar['value'] = 1
                    meritBar['text'] = TTLocalizer.RewardPanelMeritsMaxed
                self.resetMeritBarColor(i)
            else:
                meritBar.hide()
                meritLabel.hide()

        for i in xrange(len(expList)):
            curExp = expList[i]
            trackBar = self.trackBars[i]
            trackLabel = self.trackLabels[i]
            trackIncLabel = self.trackIncLabels[i]
            trackBar.setX(trackBar.getX() - trackBarOffset)
            trackLabel.setX(trackLabel.getX() - trackBarOffset)
            trackIncLabel.setX(trackIncLabel.getX() - trackBarOffset)
            trackIncLabel.hide()
            if toon.hasTrackAccess(i):
                trackBar.show()
                if curExp >= ToontownBattleGlobals.UnpaidMaxSkills[i] and toon.getGameAccess() != OTPGlobals.AccessFull:
                    nextExp = self.getNextExpValue(curExp, i)
                    trackBar['range'] = nextExp
                    trackBar['value'] = ToontownBattleGlobals.UnpaidMaxSkills[i]
                    trackBar['text'] = TTLocalizer.InventoryGuestExp
                elif curExp >= ToontownBattleGlobals.regMaxSkill:
                    nextExp = self.getNextExpValueUber(curExp, i)
                    trackBar['range'] = nextExp
                    uberCurrExp = curExp - ToontownBattleGlobals.regMaxSkill
                    trackBar['value'] = uberCurrExp
                    trackBar['text'] = TTLocalizer.InventoryUberTrackExp % {'nextExp': ToontownBattleGlobals.MaxSkill - curExp}
                else:
                    nextExp = self.getNextExpValue(curExp, i)
                    trackBar['range'] = nextExp
                    trackBar['value'] = curExp
                    trackBar['text'] = '%s/%s' % (curExp, nextExp)
                self.resetBarColor(i)
            else:
                trackBar.hide()
Ejemplo n.º 30
0
 def announceGenerate(self):
     DistributedAvatar.DistributedAvatar.announceGenerate(self)
     self.prevCogSuitLevel = localAvatar.getCogLevels()[
         CogDisguiseGlobals.dept2deptIndex(self.style.dept)]
     nearBubble = CollisionSphere(0, 0, 0, 50)
     nearBubble.setTangible(0)
     nearBubbleNode = CollisionNode('NearBoss')
     nearBubbleNode.setCollideMask(ToontownGlobals.WallBitmask)
     nearBubbleNode.addSolid(nearBubble)
     self.attachNewNode(nearBubbleNode)
     self.accept('enterNearBoss', self.avatarNearEnter)
     self.accept('exitNearBoss', self.avatarNearExit)
     self.collNode.removeSolid(0)
     tube1 = CollisionTube(6.5, -7.5, 2, 6.5, 7.5, 2, 2.5)
     tube2 = CollisionTube(-6.5, -7.5, 2, -6.5, 7.5, 2, 2.5)
     roof = CollisionPolygon(Point3(-4.4, 7.1,
                                    5.5), Point3(-4.4, -7.1, 5.5),
                             Point3(4.4, -7.1, 5.5), Point3(4.4, 7.1, 5.5))
     side1 = CollisionPolygon(Point3(-4.4, -7.1, 5.5),
                              Point3(-4.4, 7.1, 5.5), Point3(-4.4, 7.1, 0),
                              Point3(-4.4, -7.1, 0))
     side2 = CollisionPolygon(Point3(4.4, 7.1, 5.5), Point3(4.4, -7.1, 5.5),
                              Point3(4.4, -7.1, 0), Point3(4.4, 7.1, 0))
     front1 = CollisionPolygon(Point3(4.4, -7.1, 5.5),
                               Point3(-4.4, -7.1, 5.5),
                               Point3(-4.4, -7.1, 5.2),
                               Point3(4.4, -7.1, 5.2))
     back1 = CollisionPolygon(Point3(-4.4, 7.1, 5.5), Point3(4.4, 7.1, 5.5),
                              Point3(4.4, 7.1, 5.2), Point3(-4.4, 7.1, 5.2))
     self.collNode.addSolid(tube1)
     self.collNode.addSolid(tube2)
     self.collNode.addSolid(roof)
     self.collNode.addSolid(side1)
     self.collNode.addSolid(side2)
     self.collNode.addSolid(front1)
     self.collNode.addSolid(back1)
     self.collNodePath.reparentTo(self.axle)
     self.collNode.setCollideMask(ToontownGlobals.PieBitmask
                                  | ToontownGlobals.WallBitmask
                                  | ToontownGlobals.CameraBitmask)
     self.collNode.setName('BossZap')
     self.setTag('attackCode', str(ToontownGlobals.BossCogElectricFence))
     self.accept('enterBossZap', self.__touchedBoss)
     bubbleL = CollisionSphere(10, -5, 0, 10)
     bubbleL.setTangible(0)
     bubbleLNode = CollisionNode('BossZap')
     bubbleLNode.setCollideMask(ToontownGlobals.WallBitmask)
     bubbleLNode.addSolid(bubbleL)
     self.bubbleL = self.axle.attachNewNode(bubbleLNode)
     self.bubbleL.setTag('attackCode', str(ToontownGlobals.BossCogSwatLeft))
     self.bubbleL.stash()
     bubbleR = CollisionSphere(-10, -5, 0, 10)
     bubbleR.setTangible(0)
     bubbleRNode = CollisionNode('BossZap')
     bubbleRNode.setCollideMask(ToontownGlobals.WallBitmask)
     bubbleRNode.addSolid(bubbleR)
     self.bubbleR = self.axle.attachNewNode(bubbleRNode)
     self.bubbleR.setTag('attackCode',
                         str(ToontownGlobals.BossCogSwatRight))
     self.bubbleR.stash()
     bubbleF = CollisionSphere(0, -25, 0, 12)
     bubbleF.setTangible(0)
     bubbleFNode = CollisionNode('BossZap')
     bubbleFNode.setCollideMask(ToontownGlobals.WallBitmask)
     bubbleFNode.addSolid(bubbleF)
     self.bubbleF = self.rotateNode.attachNewNode(bubbleFNode)
     self.bubbleF.setTag('attackCode',
                         str(ToontownGlobals.BossCogFrontAttack))
     self.bubbleF.stash()
Ejemplo n.º 31
0
    def initGagFrame(self, toon, expList, meritList):
        self.avNameLabel['text'] = toon.getName()
        self.endTrackFrame.hide()
        self.gagExpFrame.show()
        self.newGagFrame.hide()
        self.promotionFrame.hide()
        self.questFrame.hide()
        self.itemFrame.hide()
        self.cogPartFrame.hide()
        self.missedItemFrame.hide()

        trackBarOffset = 0

        # Initialize the cog merit bars if enabled
        for i in range(len(SuitDNA.suitDepts)):
            meritBar = self.meritBars[i]
            meritLabel = self.meritLabels[i]
            totalMerits = CogDisguiseGlobals.getTotalMerits(toon, i)
            merits = meritList[i]
            self.meritIncLabels[i].hide()
            # if we are have a full suit then we are working on promotions
            if CogDisguiseGlobals.isSuitComplete(toon.cogParts, i):
                # if we don't show the merit bar, we must shift the skill bars left
                if not self.trackBarsOffset:
                    trackBarOffset = 0.47
                    # only do this once! :)
                    self.trackBarsOffset = 1
                meritBar.show()
                meritLabel.show()
                meritLabel.show()
                if totalMerits:
                    meritBar["range"] = totalMerits
                    meritBar["value"] = merits
                    if merits == totalMerits:
                        meritBar["text"] = TTLocalizer.RewardPanelMeritAlert
                    else:
                        meritBar["text"] = ("%s/%s %s" % (merits,
                                                          totalMerits,
                                                          TTLocalizer.RewardPanelMeritBarLabels[i],))
                else:
                    # if total merits = None, this dept is maxed out
                    meritBar["range"] = 1
                    meritBar["value"] = 1
                    meritBar["text"] = TTLocalizer.RewardPanelMeritsMaxed
                self.resetMeritBarColor(i)
            else:
                meritBar.hide()
                meritLabel.hide()

        # Initialize all the bars with the current and next exp
        for i in range(len(expList)):
            curExp = expList[i]
            trackBar = self.trackBars[i]
            trackLabel = self.trackLabels[i]
            trackIncLabel = self.trackIncLabels[i]
            trackBar.setX(trackBar.getX() - trackBarOffset)
            trackLabel.setX(trackLabel.getX() - trackBarOffset)
            trackIncLabel.setX(trackIncLabel.getX() - trackBarOffset)
            trackIncLabel.hide()
            if toon.hasTrackAccess(i):
                trackBar.show()

                if curExp >= ToontownBattleGlobals.UnpaidMaxSkill and toon.getGameAccess() != OTPGlobals.AccessFull:
                    nextExp = self.getNextExpValue(curExp, i)
                    trackBar["range"] = nextExp
                    trackBar["value"] = ToontownBattleGlobals.UnpaidMaxSkill
                    trackBar["text"] = (TTLocalizer.InventoryGuestExp)

                elif curExp >= ToontownBattleGlobals.regMaxSkill:
                    nextExp = self.getNextExpValueUber(curExp, i)
                    trackBar["range"] = nextExp
                    uberCurrExp = curExp - ToontownBattleGlobals.regMaxSkill
                    trackBar["value"] = uberCurrExp
                    trackBar["text"] = (TTLocalizer.InventoryUberTrackExp %
                                                  {"nextExp": ToontownBattleGlobals.MaxSkill - curExp,})
                else:
                    nextExp = self.getNextExpValue(curExp, i)
                    trackBar["range"] = nextExp
                    trackBar["value"] = curExp
                    trackBar["text"] = ("%s/%s" % (curExp, nextExp))
                self.resetBarColor(i)
            else:
                trackBar.hide()


        return
Ejemplo n.º 32
0
 def removeParts(self, toon, suitDept):
     parts = toon.getCogParts()
     if CogDisguiseGlobals.isSuitComplete(parts, suitDept):
         toon.loseCogParts(suitDept)
    def initGagFrame(self, toon, expList, meritList, noSkip=False):
        self.notify.debug('Initializing Gag Frame!')
        self.avNameLabel['text'] = toon.getName()
        self.hqBonusLabel.hide()
        try:
            zoneId = base.cr.playGame.getPlace().getTaskZoneId()
        except:
            zoneId = 0
        if hasattr(base.cr, 'newsManager'):
            if base.cr.newsManager.isHolidayRunning(
                    ToontownGlobals.MORE_XP_HOLIDAY):
                self.multiplierLabel['text'] = "5x Gag Multiplier"
            if base.cr.newsManager.getInvading():
                self.hqBonusLabel['text'] = TTLocalizer.CogInvasionBonus
            if ZoneUtil.isCogHQZone(zoneId):
                self.hqBonusLabel['text'] = TTLocalizer.CogHQBonus
            if base.cr.newsManager.getInvading() and ZoneUtil.isCogHQZone(
                    zoneId):
                self.hqBonusLabel['text'] = TTLocalizer.MegaBonus
        if ZoneUtil.isCogHQZone(zoneId) or self.hqBonusLabel['text'] != '':
            self.hqBonusLabel.show()
            self.growShrink = Sequence(
                LerpScaleInterval(self.hqBonusLabel,
                                  1,
                                  1.1,
                                  0.9,
                                  blendType='easeInOut'),
                LerpScaleInterval(self.hqBonusLabel,
                                  1,
                                  0.9,
                                  1.1,
                                  blendType='easeInOut'))
            self.growShrink.loop()
        self.endTrackFrame.hide()
        self.gagExpFrame.show()
        self.multiplierLabel.show()
        self.newGagFrame.hide()
        self.promotionFrame.hide()
        self.questFrame.hide()
        self.itemFrame.hide()
        self.cogPartFrame.hide()
        self.missedItemFrame.hide()
        trackBarOffset = 0
        self.skipButton['state'] = DGG.DISABLED if noSkip else DGG.NORMAL
        for i in xrange(len(SuitDNA.suitDepts)):
            meritBar = self.meritBars[i]
            meritLabel = self.meritLabels[i]
            totalMerits = CogDisguiseGlobals.getTotalMerits(toon, i)
            merits = meritList[i]
            self.meritIncLabels[i].hide()
            if CogDisguiseGlobals.isSuitComplete(toon.cogParts, i):
                if not self.trackBarsOffset:
                    trackBarOffset = 0.47
                    self.trackBarsOffset = 1
                meritBar.show()
                meritLabel.show()
                meritLabel.show()
                if totalMerits:
                    meritBar['range'] = totalMerits
                    meritBar['value'] = merits
                    if merits == totalMerits:
                        meritBar['text'] = TTLocalizer.RewardPanelMeritAlert
                    else:
                        meritBar['text'] = '%s/%s %s' % (
                            merits, totalMerits,
                            TTLocalizer.RewardPanelMeritBarLabels[i])
                else:
                    meritBar['range'] = 1
                    meritBar['value'] = 1
                    meritBar['text'] = TTLocalizer.RewardPanelMeritsMaxed
                self.resetMeritBarColor(i)
            else:
                meritBar.hide()
                meritLabel.hide()

        for i in xrange(len(expList)):
            curExp = expList[i]
            trackBar = self.trackBars[i]
            trackLabel = self.trackLabels[i]
            trackIncLabel = self.trackIncLabels[i]
            trackBar.setX(trackBar.getX() - trackBarOffset)
            trackLabel.setX(trackLabel.getX() - trackBarOffset)
            trackIncLabel.setX(trackIncLabel.getX() - trackBarOffset)
            trackIncLabel.hide()
            if toon.hasTrackAccess(i):
                trackBar.show()
                if curExp >= ToontownBattleGlobals.UnpaidMaxSkills[
                        i] and toon.getGameAccess() != OTPGlobals.AccessFull:
                    nextExp = self.getNextExpValue(curExp, i)
                    trackBar['range'] = nextExp
                    trackBar['value'] = ToontownBattleGlobals.UnpaidMaxSkills[
                        i]
                    trackBar['text'] = TTLocalizer.InventoryGuestExp
                elif curExp >= ToontownBattleGlobals.regMaxSkill:
                    nextExp = self.getNextExpValueUber(curExp, i)
                    trackBar['range'] = nextExp
                    uberCurrExp = curExp - ToontownBattleGlobals.regMaxSkill
                    trackBar['value'] = uberCurrExp
                    trackBar['text'] = TTLocalizer.InventoryUberTrackExp % {
                        'nextExp': ToontownBattleGlobals.MaxSkill - curExp
                    }
                else:
                    nextExp = self.getNextExpValue(curExp, i)
                    trackBar['range'] = nextExp
                    trackBar['value'] = curExp
                    trackBar['text'] = '%s/%s' % (curExp, nextExp)
                self.resetBarColor(i)
            else:
                trackBar.hide()
 def recoverMerits(self,
                   av,
                   cogList,
                   zoneId,
                   multiplier=1,
                   extraMerits=None,
                   addInvasion=True):
     avId = av.getDoId()
     meritsRecovered = [0, 0, 0, 0]
     if extraMerits is None:
         extraMerits = [0, 0, 0, 0]
     if addInvasion and self.air.suitInvasionManager.getInvading():
         multiplier *= getInvasionMultiplier()
     for i in xrange(len(extraMerits)):
         if CogDisguiseGlobals.isSuitComplete(av.getCogParts(), i):
             meritsRecovered[i] += extraMerits[i]
             self.notify.debug('recoverMerits: extra merits = %s' %
                               extraMerits[i])
     self.notify.debug('recoverMerits: multiplier = %s' % multiplier)
     for cogDict in cogList:
         dept = SuitDNA.suitDepts.index(cogDict['track'])
         if avId in cogDict['activeToons']:
             if CogDisguiseGlobals.isSuitComplete(
                     av.getCogParts(),
                     SuitDNA.suitDepts.index(cogDict['track'])):
                 self.notify.debug(
                     'recoverMerits: checking against cogDict: %s' %
                     cogDict)
                 rand = random.random() * 100
                 if rand <= self.getPercentChance(
                 ) and not cogDict['isVirtual']:
                     merits = cogDict['level'] * MeritMultiplier
                     merits = int(round(merits))
                     if cogDict['hasRevives']:
                         merits *= 2
                     merits = merits * multiplier
                     merits = int(round(merits))
                     meritsRecovered[dept] += merits
                     self.notify.debug('recoverMerits: merits = %s' %
                                       merits)
                 else:
                     self.notify.debug('recoverMerits: virtual cog!')
     if meritsRecovered != [0, 0, 0, 0]:
         actualCounted = [0, 0, 0, 0]
         merits = av.getCogMerits()
         for i in xrange(len(meritsRecovered)):
             max = CogDisguiseGlobals.getTotalMerits(av, i)
             if max:
                 if merits[i] + meritsRecovered[i] <= max:
                     actualCounted[i] = meritsRecovered[i]
                     merits[i] += meritsRecovered[i]
                 else:
                     actualCounted[i] = max - merits[i]
                     merits[i] = max
                 av.b_setCogMerits(merits)
         if reduce(lambda x, y: x + y, actualCounted):
             self.air.writeServerEvent('merits', avId,
                                       '%s|%s|%s|%s' % tuple(actualCounted))
             self.notify.debug('recoverMerits: av %s recovered merits %s' %
                               (avId, actualCounted))
     return meritsRecovered