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)
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
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)
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,)} )
def getNextMeritValue(self, curMerits, toon, dept): totalMerits = CogDisguiseGlobals.getTotalMerits(toon, dept) retVal = totalMerits if curMerits > totalMerits: retVal = amount return retVal
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
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()
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()
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
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()
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
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)
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()])
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
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)
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
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
def getCogPartIntervalList(self, toon, cogPartList): itemName = CogDisguiseGlobals.getPartName(cogPartList) intervalList = [] intervalList.append(Func(self.cogPartLabel.setProp, 'text', itemName)) intervalList.append(Wait(1)) return intervalList
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()
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.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()
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()
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
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