def knockKnockTrack(self, avatar, duration): if avatar == None: return self.rimshot = base.loadSfx('phase_5/audio/sfx/AA_heal_telljoke.ogg') self.knockSfx = base.loadSfx('phase_5/audio/sfx/GUI_knock_3.ogg') joke = KnockKnockJokes[self.propId % len(KnockKnockJokes)] place = base.cr.playGame.getPlace() doorName = TTLocalizer.DoorNametag if place: zone = place.getZoneId() branch = ZoneUtil.getBranchZone(zone) self.nametag = None self.nametagNP = None doorNP = render.find('**/KnockKnockDoorSphere_' + str(self.propId) + ';+s') if doorNP.isEmpty(): self.notify.warning('Could not find KnockKnockDoorSphere_%s' % self.propId) return self.nametag = NametagGroup() self.nametag.setAvatar(doorNP) self.nametag.setFont(ToontownGlobals.getToonFont()) self.nametag.setName(doorName) self.nametag.setActive(0) self.nametag.manage(base.marginManager) self.nametag.getNametag3d().setBillboardOffset(4) nametagNode = self.nametag.getNametag3d() self.nametagNP = render.attachNewNode(nametagNode) self.nametagNP.setName('knockKnockDoor_nt_' + str(self.propId)) pos = doorNP.node().getSolid(0).getCenter() self.nametagNP.setPos(pos + Vec3(0, 0, avatar.getHeight() + 2)) d = duration * 0.125 track = Sequence(Parallel(Sequence(Wait(d * 0.5), SoundInterval(self.knockSfx)), Func(self.nametag.setChat, TTLocalizer.DoorKnockKnock, CFSpeech), Wait(d)), Func(avatar.setChatAbsolute, TTLocalizer.DoorWhosThere, CFSpeech | CFTimeout, openEnded=0), Wait(d), Func(self.nametag.setChat, joke[0], CFSpeech), Wait(d), Func(avatar.setChatAbsolute, joke[0] + TTLocalizer.DoorWhoAppendix, CFSpeech | CFTimeout, openEnded=0), Wait(d), Func(self.nametag.setChat, joke[1], CFSpeech), Parallel(SoundInterval(self.rimshot, startTime=2.0), Wait(d * 4)), Func(self.cleanupTrack)) track.delayDelete = DelayDelete.DelayDelete(avatar, 'knockKnockTrack') return track
def enter(self, requestStatus, visibilityFlag = 1, arrowsOn = 1): teleportDebug(requestStatus, 'Street.enter(%s)' % (requestStatus,)) self._ttfToken = None self.fsm.enterInitialState() base.playMusic(self.loader.music, looping=1, volume=0.8) self.loader.geom.reparentTo(render) if visibilityFlag: self.visibilityOn() base.localAvatar.setGeom(self.loader.geom) base.localAvatar.setOnLevelGround(1) self._telemLimiter = TLGatherAllAvs('Street', RotationLimitToH) NametagGlobals.setMasterArrowsOn(arrowsOn) self.zone = ZoneUtil.getBranchZone(requestStatus['zoneId']) def __lightDecorationOn__(): geom = base.cr.playGame.getPlace().loader.geom self.halloweenLights = geom.findAllMatches('**/*light*') self.halloweenLights += geom.findAllMatches('**/*lamp*') self.halloweenLights += geom.findAllMatches('**/prop_snow_tree*') for light in self.halloweenLights: light.setColorScaleOff(1) if base.cr.newsManager.isHolidayRunning(ToontownGlobals.HALLOWEEN) and self.loader.hood.spookySkyFile: lightsOff = Sequence(LerpColorScaleInterval(base.cr.playGame.hood.loader.geom, 0.1, Vec4(0.55, 0.55, 0.65, 1)), Func(self.loader.hood.startSpookySky)) lightsOff.start() else: self.loader.hood.startSky() lightsOn = LerpColorScaleInterval(base.cr.playGame.hood.loader.geom, 0.1, Vec4(1, 1, 1, 1)) lightsOn.start() self.accept('doorDoneEvent', self.handleDoorDoneEvent) self.accept('DistributedDoor_doorTrigger', self.handleDoorTrigger) self.enterZone(requestStatus['zoneId']) self.tunnelOriginList = base.cr.hoodMgr.addLinkTunnelHooks(self, self.loader.nodeList) self.fsm.request(requestStatus['how'], [requestStatus])
def spawn(air, zone, element, match): if zone % 1000 != 0: # This should hopefully create the Fishermen NPCs on streets. NPCToons.createNpcsInZone(air, zone) pond = DistributedFishingPondAI(air) area = ZoneUtil.getBranchZone(zone) pond.setArea(area) pond.generateWithRequired(zone) bingoMgr = DistributedPondBingoManagerAI(air) bingoMgr.setPondDoId(pond.getDoId()) bingoMgr.generateWithRequired(zone) pond.bingoMgr = bingoMgr pond.bingoMgr.createGame() simbase.air.fishManager.ponds[zone] = pond for i in range(FishingTargetGlobals.getNumTargets(area)): target = DistributedFishingTargetAI(simbase.air) target.setPondDoId(pond.getDoId()) target.generateWithRequired(zone) for child in element.children: if isinstance(child, DNAProp) and 'fishing_spot' in child.code: spot = DistributedFishingSpotAI(air) spot.setPondDoId(pond.getDoId()) x, y, z = child.getPos() h, p, r = child.getHpr() spot.setPosHpr(x, y, z, h, p, r) spot.generateWithRequired(zone)
def enter(self, requestStatus): CogHQExterior.CogHQExterior.enter(self, requestStatus) for train in self.trains: train.show() # Load the CogHQ DNA file: dnaStore = DNAStorage() dnaFileName = self.genDNAFileName(self.zoneId) loadDNAFileAI(dnaStore, dnaFileName) # Collect all of the vis group zone IDs: self.zoneVisDict = {} for i in xrange(dnaStore.getNumDNAVisGroupsAI()): groupFullName = dnaStore.getDNAVisGroupName(i) visGroup = dnaStore.getDNAVisGroupAI(i) visZoneId = int(base.cr.hoodMgr.extractGroupName(groupFullName)) visZoneId = ZoneUtil.getTrueZoneId(visZoneId, self.zoneId) visibles = [] for i in xrange(visGroup.getNumVisibles()): visibles.append(int(visGroup.getVisible(i))) visibles.append(ZoneUtil.getBranchZone(visZoneId)) self.zoneVisDict[visZoneId] = visibles # Next, we want interest in all vis groups due to this being a Cog HQ: base.cr.sendSetZoneMsg(self.zoneId, self.zoneVisDict.values()[0])
def recoverItems(self, av, suitsKilled, taskZoneId): # Get the avatars current quests. avQuests = av.getQuests() questList = [] recoveredItems = [] unrecoveredItems = [] taskZoneId = ZoneUtil.getBranchZone(taskZoneId) # Iterate through the avatars current quests. for i in xrange(0, len(avQuests), 5): questDesc = avQuests[i : i + 5] questClass = Quests.getQuest(questDesc[QuestIdIndex]) if questClass.getCompletionStatus(av, questDesc) == Quests.INCOMPLETE: if isinstance(questClass, Quests.CogQuest): for suit in suitsKilled: if questClass.doesCogCount(av.doId, suit, taskZoneId, suit['activeToons']): questDesc[QuestProgressIndex] += 1 elif isinstance(questClass, Quests.RecoverItemQuest): if questClass.getHolder() != Quests.AnyFish: for suit in suitsKilled: if questClass.doesCogCount(av.doId, suit, taskZoneId, suit['activeToons']): baseChance = questClass.getPercentChance() amountRemaining = questClass.getNumItems() - questDesc[QuestProgressIndex] chance = Quests.calcRecoverChance(amountRemaining, baseChance) if chance >= baseChance: questDesc[QuestProgressIndex] += 1 recoveredItems.append(questClass.getItem()) else: unrecoveredItems.append(questClass.getItem()) questList.append(questDesc) av.b_setQuests(questList) return (recoveredItems, unrecoveredItems)
def recoverItems(self, toon, suitsKilled, taskZoneId): flattenedQuests = toon.getQuests() questList = [] #unflattened recoveredItems = [] unrecoveredItems = [] taskZoneId = ZoneUtil.getBranchZone(taskZoneId) for i in xrange(0, len(flattenedQuests), 5): questDesc = flattenedQuests[i : i + 5] questClass = Quests.getQuest(questDesc[0]) if questClass.getCompletionStatus(toon, questDesc) == Quests.INCOMPLETE: if isinstance(questClass, Quests.CogQuest): for suit in suitsKilled: if questClass.doesCogCount(toon.doId, suit, taskZoneId, suit['activeToons']): questDesc[4] += 1 elif isinstance(questClass, Quests.RecoverItemQuest): if questClass.getHolder() != Quests.AnyFish: for suit in suitsKilled: if questClass.doesCogCount(toon.doId, suit, taskZoneId, suit['activeToons']): minchance = questClass.getPercentChance() import random chance = random.randint(minchance - 40, 100) if chance <= minchance: questDesc[4] += 1 recoveredItems.append(questClass.getItem()) else: unrecoveredItems.append(questClass.getItem()) questList.append(questDesc) toon.b_setQuests(questList) return (recoveredItems, unrecoveredItems)
def begin(self, range, label, gui, tipCategory, zoneId): self.waitBar['range'] = range self.title['text'] = label loadingScreenTex = self.zone2picture.get(ZoneUtil.getBranchZone(zoneId), self.defaultTex) self.background = loader.loadTexture(loadingScreenTex) self.__count = 0 self.__expectedCount = range if gui: if base.localAvatarStyle: from toontown.toon import Toon self.toon = Toon.Toon() self.toon.setDNA(base.localAvatarStyle) self.toon.loop('bored', fromFrame=135, toFrame=135) self.toon.getGeomNode().setDepthWrite(1) self.toon.getGeomNode().setDepthTest(1) self.toon.setHpr(205, 0, 0) self.toon.setScale(0.18) self.toon.setPos(base.a2dBottomRight.getX()/1.25, 0, -0.034) self.toon.reparentTo(self.waitBar) self.waitBar['frameSize'] = (base.a2dLeft+(base.a2dRight/8.15), base.a2dRight-(base.a2dRight/2.57), -0.03, 0.03) self.title.reparentTo(base.a2dpBottomLeft, LOADING_SCREEN_SORT_INDEX) self.title.setPos(0.24, 0, 0.23) self.gui.setPos(0, -0.1, 0) self.gui.reparentTo(aspect2d, LOADING_SCREEN_SORT_INDEX) self.gui.setTexture(self.background, 1) if loadingScreenTex == self.defaultTex: self.logo.reparentTo(base.a2dpTopCenter, LOADING_SCREEN_SORT_INDEX) else: self.title.reparentTo(base.a2dpBottomLeft, LOADING_SCREEN_SORT_INDEX) self.gui.reparentTo(hidden) self.logo.reparentTo(hidden) self.waitBar.reparentTo(base.a2dpBottomCenter, LOADING_SCREEN_SORT_INDEX) self.waitBar.update(self.__count)
def handleToonInteriorDone(self): status = self.place.doneStatus if ZoneUtil.getBranchZone(status['zoneId']) == self.hood.hoodId and status['shardId'] == None: self.fsm.request('quietZone', [status]) else: self.doneStatus = status messenger.send(self.doneEvent) return
def streetDone(self): self.requestStatus = self.place.doneStatus status = self.place.doneStatus if status['loader'] == 'townLoader' and ZoneUtil.getBranchZone(status['zoneId']) == self.branchZone and status['shardId'] == None: self.fsm.request('quietZone', [status]) else: self.doneStatus = status messenger.send(self.doneEvent) return
def handlePlaygroundDone(self): status = self.place.doneStatus if self.enteringARace(status) and status.get('shardId') == None: zoneId = status['zoneId'] self.fsm.request('quietZone', [status]) elif ZoneUtil.getBranchZone(status['zoneId']) == self.hood.hoodId and status['shardId'] == None: self.fsm.request('quietZone', [status]) else: self.doneStatus = status messenger.send(self.doneEvent)
def makeDictionaries(self, dnaStore): self.nodeDict = {} self.zoneDict = {} self.zoneVisDict = {} self.nodeList = [] self.fadeInDict = {} self.fadeOutDict = {} a1 = Vec4(1, 1, 1, 1) a0 = Vec4(1, 1, 1, 0) numVisGroups = dnaStore.getNumDNAVisGroupsAI() for i in xrange(numVisGroups): groupFullName = dnaStore.getDNAVisGroupName(i) visGroup = dnaStore.getDNAVisGroupAI(i) groupName = base.cr.hoodMgr.extractGroupName(groupFullName) zoneId = int(groupName) zoneId = ZoneUtil.getTrueZoneId(zoneId, self.zoneId) groupNode = self.geom.find('**/' + groupFullName) if groupNode.isEmpty(): self.notify.error('Could not find visgroup') else: if ':' in groupName: groupName = '%s%s' % (zoneId, groupName[groupName.index(':'):]) else: groupName = '%s' % zoneId groupNode.setName(groupName) groupNode.flattenMedium() self.nodeDict[zoneId] = [] self.nodeList.append(groupNode) self.zoneDict[zoneId] = groupNode visibles = [] for i in xrange(visGroup.getNumVisibles()): visibles.append(int(visGroup.visibles[i])) visibles.append(ZoneUtil.getBranchZone(zoneId)) self.zoneVisDict[zoneId] = visibles fadeDuration = 0.5 self.fadeOutDict[groupNode] = Sequence(Func(groupNode.setTransparency, 1), LerpColorScaleInterval(groupNode, fadeDuration, a0, startColorScale=a1), Func(groupNode.clearColorScale), Func(groupNode.clearTransparency), Func(groupNode.stash), name='fadeZone-' + str(zoneId), autoPause=1) self.fadeInDict[groupNode] = Sequence(Func(groupNode.unstash), Func(groupNode.setTransparency, 1), LerpColorScaleInterval(groupNode, fadeDuration, a1, startColorScale=a0), Func(groupNode.clearColorScale), Func(groupNode.clearTransparency), name='fadeZone-' + str(zoneId), autoPause=1) for i in xrange(numVisGroups): groupFullName = dnaStore.getDNAVisGroupName(i) zoneId = int(base.cr.hoodMgr.extractGroupName(groupFullName)) zoneId = ZoneUtil.getTrueZoneId(zoneId, self.zoneId) for j in xrange(dnaStore.getNumVisiblesInDNAVisGroup(i)): visName = dnaStore.getVisibleName(i, j) groupName = base.cr.hoodMgr.extractGroupName(visName) nextZoneId = int(groupName) nextZoneId = ZoneUtil.getTrueZoneId(nextZoneId, self.zoneId) visNode = self.zoneDict[nextZoneId] self.nodeDict[zoneId].append(visNode) self.hood.dnaStore.resetPlaceNodes() self.hood.dnaStore.resetDNAGroups() self.hood.dnaStore.resetDNAVisGroups() self.hood.dnaStore.resetDNAVisGroupsAI()
def streetDone(self): self.requestStatus = self.place.doneStatus status = self.place.doneStatus if status['loader'] == 'townLoader' and ZoneUtil.getBranchZone( status['zoneId'] ) == self.branchZone and status['shardId'] == None: self.fsm.request('quietZone', [status]) else: self.doneStatus = status messenger.send(self.doneEvent) return
def load(self, zoneId): self.zoneId = zoneId self.parentFSMState.addChild(self.fsm) self.loadBattleAnims() self.branchZone = ZoneUtil.getBranchZone(zoneId) self.canonicalBranchZone = ZoneUtil.getCanonicalBranchZone(zoneId) self.music = base.loadMusic(self.musicFile) self.activityMusic = base.loadMusic(self.activityMusicFile) self.battleMusic = base.loadMusic('phase_3.5/audio/bgm/encntr_general_bg.ogg') self.townBattle = TownBattle.TownBattle(self.townBattleDoneEvent) self.townBattle.load()
def handlePlaygroundDone(self): status = self.place.doneStatus teleportDebug(status, "handlePlaygroundDone, doneStatus=%s" % (status,)) if ZoneUtil.getBranchZone(status["zoneId"]) == self.hood.hoodId and status["shardId"] == None: teleportDebug(status, "same branch") self.fsm.request("quietZone", [status]) else: self.doneStatus = status teleportDebug(status, "different hood") messenger.send(self.doneEvent) return
def handlePlaygroundDone(self): status = self.place.doneStatus teleportDebug(status, 'handlePlaygroundDone, doneStatus=%s' % (status,)) if ZoneUtil.getBranchZone(status['zoneId']) == self.hood.hoodId and status['shardId'] == None: teleportDebug(status, 'same branch') self.fsm.request('quietZone', [status]) else: self.doneStatus = status teleportDebug(status, 'different hood') messenger.send(self.doneEvent) return
def makeDictionaries(self, dnaStore): self.nodeDict = {} self.zoneDict = {} self.zoneVisDict = {} self.nodeList = [] self.fadeInDict = {} self.fadeOutDict = {} a1 = Vec4(1, 1, 1, 1) a0 = Vec4(1, 1, 1, 0) numVisGroups = dnaStore.getNumDNAVisGroupsAI() for i in xrange(numVisGroups): groupFullName = dnaStore.getDNAVisGroupName(i) visGroup = dnaStore.getDNAVisGroupAI(i) groupName = base.cr.hoodMgr.extractGroupName(groupFullName) zoneId = int(groupName) zoneId = ZoneUtil.getTrueZoneId(zoneId, self.zoneId) groupNode = self.geom.find('**/' + groupFullName) if groupNode.isEmpty(): self.notify.error('Could not find visgroup') else: if ':' in groupName: groupName = '%s%s' % (zoneId, groupName[groupName.index(':'):]) else: groupName = '%s' % zoneId groupNode.setName(groupName) groupNode.flattenMedium() self.nodeDict[zoneId] = [] self.nodeList.append(groupNode) self.zoneDict[zoneId] = groupNode visibles = [] for i in xrange(visGroup.getNumVisibles()): visibles.append(int(visGroup.visibles[i])) visibles.append(ZoneUtil.getBranchZone(zoneId)) self.zoneVisDict[zoneId] = visibles fadeDuration = 0.5 self.fadeOutDict[groupNode] = Sequence(Func(groupNode.setTransparency, 1), LerpColorScaleInterval(groupNode, fadeDuration, a0, startColorScale=a1), Func(groupNode.clearColorScale), Func(groupNode.clearTransparency), Func(groupNode.stash), name='fadeZone-' + str(zoneId), autoPause=1) self.fadeInDict[groupNode] = Sequence(Func(groupNode.unstash), Func(groupNode.setTransparency, 1), LerpColorScaleInterval(groupNode, fadeDuration, a1, startColorScale=a0), Func(groupNode.clearColorScale), Func(groupNode.clearTransparency), name='fadeZone-' + str(zoneId), autoPause=1) for i in xrange(numVisGroups): groupFullName = dnaStore.getDNAVisGroupName(i) zoneId = int(base.cr.hoodMgr.extractGroupName(groupFullName)) zoneId = ZoneUtil.getTrueZoneId(zoneId, self.zoneId) for j in xrange(dnaStore.getNumVisiblesInDNAVisGroup(i)): visName = dnaStore.getVisibleName(i, j) groupName = base.cr.hoodMgr.extractGroupName(visName) nextZoneId = int(groupName) nextZoneId = ZoneUtil.getTrueZoneId(nextZoneId, self.zoneId) visNode = self.zoneDict[nextZoneId] self.nodeDict[zoneId].append(visNode) self.hood.dnaStore.resetPlaceNodes() self.hood.dnaStore.resetDNAGroups() self.hood.dnaStore.resetDNAVisGroups() self.hood.dnaStore.resetDNAVisGroupsAI()
def handlePlaygroundDone(self): status = self.place.doneStatus if self.enteringAGolfCourse(status) and status.get("shardId") == None: zoneId = status["zoneId"] self.fsm.request("quietZone", [status]) elif ZoneUtil.getBranchZone(status["zoneId"]) == self.hood.hoodId and status["shardId"] == None: self.fsm.request("quietZone", [status]) else: self.doneStatus = status messenger.send(self.doneEvent) return
def load(self, zoneId): self.zoneId = zoneId self.parentFSMState.addChild(self.fsm) self.loadBattleAnims() self.branchZone = ZoneUtil.getBranchZone(zoneId) self.canonicalBranchZone = ZoneUtil.getCanonicalBranchZone(zoneId) self.music = base.loadMusic(self.musicFile) self.activityMusic = base.loadMusic(self.activityMusicFile) self.battleMusic = base.loadMusic(self.zone2music.get(ZoneUtil.getHoodId(zoneId), 'phase_9/audio/bgm/encntr_suit_ttc.ogg'))#'phase_3.5/audio/bgm/encntr_general_bg.ogg')) self.townBattle = TownBattle.TownBattle(self.townBattleDoneEvent) self.townBattle.load()
def handlePlaygroundDone(self): status = self.place.doneStatus if self.enteringAGolfCourse(status) and status.get('shardId') == None: zoneId = status['zoneId'] self.fsm.request('quietZone', [status]) elif ZoneUtil.getBranchZone(status['zoneId']) == self.hood.hoodId and status['shardId'] == None: self.fsm.request('quietZone', [status]) else: self.doneStatus = status messenger.send(self.doneEvent) return
def handlePlaygroundDone(self): status = self.place.doneStatus teleportDebug(status, 'handlePlaygroundDone, doneStatus=%s' % (status,)) if ZoneUtil.getBranchZone(status['zoneId']) == self.hood.hoodId and status['shardId'] == None: teleportDebug(status, 'same branch') self.fsm.request('quietZone', [status]) else: self.doneStatus = status teleportDebug(status, 'different hood') messenger.send(self.doneEvent) return
def recoverItems(self, av, suitsKilled, taskZoneId): # Get the avatars current quests. avQuests = av.getQuests() questList = [] recoveredItems = [] unrecoveredItems = [] taskZoneId = ZoneUtil.getBranchZone(taskZoneId) # Iterate through the avatars current quests. for i in xrange(0, len(avQuests), 5): questDesc = avQuests[i : i + 5] questClass = Quests.getQuest(questDesc[QuestIdIndex]) # Check if the Quest isnt already complete if questClass.getCompletionStatus(av, questDesc) == Quests.INCOMPLETE: # Check if we are dealing with a RecoverItemQuest if isinstance(questClass, Quests.RecoverItemQuest): # Iterate through all the Cogs that were killed in the battle for suit in suitsKilled: # Because the RecoveItemQuest class doesn't have a # function to see if a Cog counts. We need to manually # check if the Cog is valid for the Quest if (questClass.getHolder() == Quests.Any) or \ (questClass.getHolderType() == 'type' and \ questClass.getHolder() == suit['type']) or \ (questClass.getHolderType() == 'track' and \ questClass.getHolder() == suit['track']) or \ (questClass.getHolderType() == 'level' and \ questClass.getHolder() <= suit['level']): # It looks like the Cog was valid. Lets see if they # found what they were looking for. baseChance = questClass.getPercentChance() amountRemaining = questClass.getNumItems() - questDesc[QuestProgressIndex] chance = Quests.calcRecoverChance(amountRemaining, baseChance) # They found it! Give them their reward! if chance >= baseChance: questDesc[QuestProgressIndex] += 1 recoveredItems.append(questClass.getItem()) # Better luck next time :( else: unrecoveredItems.append(questClass.getItem()) questList.append(questDesc) av.b_setQuests(questList) return (recoveredItems, unrecoveredItems)
def load(self, zoneId): self.zoneId = zoneId self.parentFSMState.addChild(self.fsm) self.loadBattleAnims() self.branchZone = ZoneUtil.getBranchZone(zoneId) self.canonicalBranchZone = ZoneUtil.getCanonicalBranchZone(zoneId) self.music = base.loader.loadMusic(self.musicFile) self.activityMusic = base.loader.loadMusic(self.activityMusicFile) self.battleMusic = base.loader.loadMusic( 'phase_3.5/audio/bgm/encntr_general_bg.mid') self.townBattle = TownBattle.TownBattle(self.townBattleDoneEvent) self.townBattle.load()
def recoverItems(self, av, suitsKilled, taskZoneId): # Get the avatars current quests. avQuests = av.getQuests() questList = [] recoveredItems = [] unrecoveredItems = [] taskZoneId = ZoneUtil.getBranchZone(taskZoneId) # Iterate through the avatars current quests. for i in xrange(0, len(avQuests), 5): questDesc = avQuests[i : i + 5] questClass = Quests.getQuest(questDesc[QuestIdIndex]) # Check if the Quest isnt already complete if questClass.getCompletionStatus(av, questDesc) == Quests.INCOMPLETE: # Check if we are dealing with a RecoverItemQuest if isinstance(questClass, Quests.RecoverItemQuest): # Iterate through all the Cogs that were killed in the battle for suit in suitsKilled: # Because the RecoveItemQuest class doesn't have a # function to see if a Cog counts. We need to manually # check if the Cog is valid for the Quest if (questClass.getHolder() == Quests.Any) or \ (questClass.getHolderType() == 'type' and \ questClass.getHolder() == suit['type']) or \ (questClass.getHolderType() == 'track' and \ questClass.getHolder() == suit['track']) or \ (questClass.getHolderType() == 'level' and \ questClass.getHolder() <= suit['level']): # It looks like the Cog was valid. Lets see if they # found what they were looking for. baseChance = questClass.getPercentChance() amountRemaining = questClass.getNumItems() - questDesc[QuestProgressIndex] chance = Quests.calcRecoverChance(amountRemaining, baseChance) # They found it! Give them their reward! if chance >= baseChance: questDesc[QuestProgressIndex] += 1 recoveredItems.append(questClass.getItem()) # Better luck next time :( else: unrecoveredItems.append(questClass.getItem()) questList.append(questDesc) av.b_setQuests(questList) return (recoveredItems, unrecoveredItems)
def begin(self, range, label, gui, tipCategory, zoneId): self.waitBar['range'] = range self.title['text'] = label loadingScreenTex = self.zone2picture.get(ZoneUtil.getBranchZone(zoneId), self.defaultTex) self.background = loader.loadTexture(loadingScreenTex) self.__count = 0 self.__expectedCount = range if gui: if base.localAvatarStyle: from toontown.toon import Toon bored = {'emote':'bored', 'frame':135} #must define before list run = {'emote':'run', 'frame':7} victory = {'emote':'victory', 'frame':10} applause = {'emote':'applause', 'frame':23} dust = {'emote':'sprinkle-dust', 'frame':40} hypno = {'emote':'hypnotize', 'frame':25} cringe = {'emote':'cringe', 'frame':25} wave = {'emote':'wave', 'frame':25} shrug = {'emote':'shrug', 'frame':30} duck = {'emote':'duck', 'frame':40} up = {'emote':'up', 'frame':60} pushup = {'emote':'down', 'frame':23} bow = {'emote':'bow', 'frame':45} emotelist = [bored, run, victory, applause, dust, hypno, cringe, wave, shrug, duck, up, pushup, bow] emotechosen = random.choice(emotelist) self.toon = Toon.Toon() self.toon.setDNA(base.localAvatarStyle) self.toon.pose(emotechosen['emote'], emotechosen['frame']) self.toon.getGeomNode().setDepthWrite(1) self.toon.getGeomNode().setDepthTest(1) self.toon.setHpr(205, 0, 0) self.toon.setScale(0.18) self.toon.setPos(base.a2dBottomRight.getX()/1.25, 0, -0.034) self.toon.reparentTo(self.waitBar) self.waitBar['frameSize'] = (base.a2dLeft+(base.a2dRight/8.15), base.a2dRight-(base.a2dRight/2.57), -0.03, 0.03) self.title.reparentTo(base.a2dpBottomLeft, LOADING_SCREEN_SORT_INDEX) self.title.setPos(0.24, 0, 0.23) self.tip['text'] = self.getTip(tipCategory) self.gui.setPos(0, -0.1, 0) self.gui.reparentTo(aspect2d, LOADING_SCREEN_SORT_INDEX) self.gui.setTexture(self.background, 1) if loadingScreenTex == self.defaultTex: self.logo.reparentTo(base.a2dpTopCenter, LOADING_SCREEN_SORT_INDEX) else: self.title.reparentTo(base.a2dpBottomLeft, LOADING_SCREEN_SORT_INDEX) self.gui.reparentTo(hidden) self.logo.reparentTo(hidden) self.tip.reparentTo(base.a2dpBottomCenter, LOADING_SCREEN_SORT_INDEX) self.waitBar.reparentTo(base.a2dpBottomCenter, LOADING_SCREEN_SORT_INDEX) self.waitBar.update(self.__count)
def streetDone(self): self.requestStatus = self.place.doneStatus assert (self.notify.debug("streetDone() doneStatus=" + str(self.requestStatus))) status = self.place.doneStatus # Check the loader, incase this is a change to a SuitInterior: if (status["loader"] == "townLoader" and ZoneUtil.getBranchZone(status["zoneId"]) == self.branchZone and status["shardId"] == None): self.fsm.request("quietZone", [status]) else: self.doneStatus = status messenger.send(self.doneEvent)
def enter(self, requestStatus, visibilityFlag=1, arrowsOn=1): teleportDebug(requestStatus, 'Street.enter(%s)' % (requestStatus, )) self._ttfToken = None self.fsm.enterInitialState() base.playMusic(self.loader.music, looping=1, volume=0.8) self.loader.geom.reparentTo(render) if visibilityFlag: self.visibilityOn() base.localAvatar.setGeom(self.loader.geom) base.localAvatar.setOnLevelGround(1) self._telemLimiter = TLGatherAllAvs('Street', RotationLimitToH) NametagGlobals.setWant2dNametags(arrowsOn) self.zone = ZoneUtil.getBranchZone(requestStatus['zoneId']) def __lightDecorationOn__(): geom = base.cr.playGame.getPlace().loader.geom self.halloweenLights = geom.findAllMatches('**/*light*') self.halloweenLights += geom.findAllMatches('**/*lamp*') self.halloweenLights += geom.findAllMatches('**/prop_snow_tree*') for light in self.halloweenLights: light.setColorScaleOff(1) newsManager = base.cr.newsManager if newsManager: holidayIds = base.cr.newsManager.getDecorationHolidayId() if (ToontownGlobals.HALLOWEEN_COSTUMES in holidayIds or ToontownGlobals.SPOOKY_COSTUMES in holidayIds) and self.loader.hood.spookySkyFile: lightsOff = Sequence( LerpColorScaleInterval(base.cr.playGame.hood.loader.geom, 0.1, Vec4(0.55, 0.55, 0.65, 1)), Func(self.loader.hood.startSpookySky)) lightsOff.start() else: self.loader.hood.startSky() lightsOn = LerpColorScaleInterval( base.cr.playGame.hood.loader.geom, 0.1, Vec4(1, 1, 1, 1)) lightsOn.start() else: self.loader.hood.startSky() lightsOn = LerpColorScaleInterval( base.cr.playGame.hood.loader.geom, 0.1, Vec4(1, 1, 1, 1)) lightsOn.start() self.accept('doorDoneEvent', self.handleDoorDoneEvent) self.accept('DistributedDoor_doorTrigger', self.handleDoorTrigger) self.enterZone(requestStatus['zoneId']) self.tunnelOriginList = base.cr.hoodMgr.addLinkTunnelHooks( self, self.loader.nodeList, self.zoneId) self.fsm.request(requestStatus['how'], [requestStatus]) self.replaceStreetSignTextures() return
def doEnterZone(self, newZoneId): if self.zoneId != None: for i in self.loader.nodeDict[self.zoneId]: if newZoneId: if i not in self.loader.nodeDict[newZoneId]: self.loader.fadeOutDict[i].start() self.loader.exitAnimatedProps(i) else: i.stash() self.loader.exitAnimatedProps(i) if newZoneId != None: for i in self.loader.nodeDict[newZoneId]: if self.zoneId: if i not in self.loader.nodeDict[self.zoneId]: self.loader.fadeInDict[i].start() self.loader.enterAnimatedProps(i) else: if self.loader.fadeOutDict[i].isPlaying(): self.loader.fadeOutDict[i].finish() if self.loader.fadeInDict[i].isPlaying(): self.loader.fadeInDict[i].finish() self.loader.enterAnimatedProps(i) i.unstash() if newZoneId != self.zoneId: if visualizeZones: if self.zoneId != None: self.loader.zoneDict[self.zoneId].clearColor() if newZoneId != None: self.loader.zoneDict[newZoneId].setColor(0, 0, 1, 1, 100) if newZoneId != None: if not base.cr.astronSupport: base.cr.sendSetZoneMsg(newZoneId) else: visZones = [ self.loader.node2zone[x] for x in self.loader.nodeDict[newZoneId] ] visZones.append(ZoneUtil.getBranchZone(newZoneId)) base.cr.sendSetZoneMsg(newZoneId, visZones) self.notify.debug('Entering Zone %d' % newZoneId) self.zoneId = newZoneId geom = base.cr.playGame.getPlace().loader.geom self.halloweenLights = geom.findAllMatches('**/*light*') self.halloweenLights += geom.findAllMatches('**/*lamp*') self.halloweenLights += geom.findAllMatches('**/prop_snow_tree*') for light in self.halloweenLights: light.setColorScaleOff(1) return
def enter(self, requestStatus): self.zoneId = requestStatus['zoneId'] BattlePlace.BattlePlace.enter(self) self.fsm.enterInitialState() base.playMusic(self.loader.music, looping=1, volume=0.8) self.loader.geom.reparentTo(render) self.nodeList = [self.loader.geom] self._telemLimiter = TLGatherAllAvs('CogHQExterior', RotationLimitToH) self.accept('doorDoneEvent', self.handleDoorDoneEvent) self.accept('DistributedDoor_doorTrigger', self.handleDoorTrigger) NametagGlobals.setWant2dNametags(True) self.tunnelOriginList = base.cr.hoodMgr.addLinkTunnelHooks(self, self.nodeList, self.zoneId) how = requestStatus['how'] self.fsm.request(how, [requestStatus]) # Load the CogHQ DNA file: dnaStore = DNAStorage() dnaFileName = self.genDNAFileName(ZoneUtil.getBranchZone(self.zoneId)) loadDNAFileAI(dnaStore, dnaFileName) # Collect all of the vis group zone IDs: self.zoneVisDict = {} for i in xrange(dnaStore.getNumDNAVisGroupsAI()): groupFullName = dnaStore.getDNAVisGroupName(i) visGroup = dnaStore.getDNAVisGroupAI(i) visZoneId = int(base.cr.hoodMgr.extractGroupName(groupFullName)) visZoneId = ZoneUtil.getTrueZoneId(visZoneId, self.zoneId) visibles = [] for i in xrange(visGroup.getNumVisibles()): visibles.append(int(visGroup.visibles[i])) visibles.append(ZoneUtil.getBranchZone(visZoneId)) self.zoneVisDict[visZoneId] = visibles # Next, we want interest in all vis groups due to this being a Cog HQ: base.cr.sendSetZoneMsg(self.zoneId, self.zoneVisDict.values()[0]) # Finally, cleanup our DNAStorage as we wont be needing it anymore: dnaStore.cleanup()
def knockKnockTrack(self, avatar, duration): if avatar == None: return self.rimshot = base.loader.loadSfx('phase_5/audio/sfx/AA_heal_telljoke.ogg') self.knockSfx = base.loader.loadSfx('phase_5/audio/sfx/GUI_knock_3.ogg') joke = KnockKnockJokes[(self.propId % len(KnockKnockJokes))] place = base.cr.playGame.getPlace() doorName = TTLocalizer.DoorNametag if place: zone = place.getZoneId() branch = ZoneUtil.getBranchZone(zone) if branch == ToontownGlobals.SillyStreet: if self.propId in KnockKnockContestJokes[ToontownGlobals.SillyStreet].keys(): joke = KnockKnockContestJokes[ToontownGlobals.SillyStreet][self.propId] doorName = KnockKnockDoorNames[self.propId] else: if branch == ToontownGlobals.LoopyLane: if self.propId in KnockKnockContestJokes[ToontownGlobals.LoopyLane].keys(): joke = KnockKnockContestJokes[ToontownGlobals.LoopyLane][self.propId] else: if branch == ToontownGlobals.PunchlinePlace: if self.propId == 1: joke = KnockKnockContestJokes[ToontownGlobals.PunchlinePlace] else: if branch == ToontownGlobals.PolarPlace: if self.propId in KnockKnockContestJokes[ToontownGlobals.PolarPlace].keys(): joke = KnockKnockContestJokes[ToontownGlobals.PolarPlace][self.propId] self.nametag = None self.nametagNP = None doorNP = render.find('**/KnockKnockDoorSphere_' + str(self.propId) + ';+s') if doorNP.isEmpty(): self.notify.warning('Could not find KnockKnockDoorSphere_%s' % self.propId) return self.nametag = NametagGroup() self.nametag.setAvatar(doorNP) self.nametag.setFont(ToontownGlobals.getToonFont()) self.nametag.setSpeechFont(ToontownGlobals.getToonFont()) self.nametag.setName(doorName) self.nametag.setActive(0) self.nametag.manage(base.marginManager) self.nametag.getNametag3d().setBillboardOffset(4) nametagNode = self.nametag.getNametag3d() self.nametagNP = render.attachNewNode(nametagNode) self.nametagNP.setName('knockKnockDoor_nt_' + str(self.propId)) pos = doorNP.getBounds().getCenter() self.nametagNP.setPos(pos + Vec3(0, 0, avatar.getHeight() + 2)) d = duration * 0.125 track = Sequence(Parallel(Sequence(Wait(d * 0.5), SoundInterval(self.knockSfx)), Func(self.nametag.setChat, TTLocalizer.DoorKnockKnock, CFSpeech), Wait(d)), Func(avatar.setChatAbsolute, TTLocalizer.DoorWhosThere, CFSpeech | CFTimeout, openEnded=0), Wait(d), Func(self.nametag.setChat, joke[0], CFSpeech), Wait(d), Func(avatar.setChatAbsolute, joke[0] + TTLocalizer.DoorWhoAppendix, CFSpeech | CFTimeout, openEnded=0), Wait(d), Func(self.nametag.setChat, joke[1], CFSpeech), Parallel(SoundInterval(self.rimshot, startTime=2.0), Wait(d * 4)), Func(self.cleanupTrack)) track.delayDelete = DelayDelete.DelayDelete(avatar, 'knockKnockTrack') return track
def handlePlaygroundDone( self ): assert( self.notify.debug( "handlePlaygroundDone()" ) ) status = self.place.doneStatus if( self.enteringARace( status ) and status.get( 'shardId' ) == None ): # GIVE THIS A WHIRL zoneId = status[ 'zoneId' ] self.fsm.request( 'quietZone', [ status ] ) elif (ZoneUtil.getBranchZone(status["zoneId"]) == self.hood.hoodId and # Going to Kart Shop status["shardId"] == None): self.fsm.request("quietZone", [status]) else: self.doneStatus = status messenger.send( self.doneEvent )
def load(self, zoneId): self.zoneId = zoneId self.parentFSMState.addChild(self.fsm) self.loadBattleAnims() self.branchZone = ZoneUtil.getBranchZone(zoneId) self.canonicalBranchZone = ZoneUtil.getCanonicalBranchZone(zoneId) self.music = base.loadMusic(self.musicFile) self.activityMusic = base.loadMusic(self.activityMusicFile) self.battleMusic = base.loadMusic( 'phase_3.5/audio/bgm/encntr_general_bg.ogg') if settings['newGui'] == True: self.townBattle = TownBattleNEW.TownBattleNEW( self.townBattleDoneEvent) self.townBattle.load() else: self.townBattle = TownBattleOLD.TownBattleOLD( self.townBattleDoneEvent) self.townBattle.load() if config.GetBool('want-april-toons', 0): self.npc = NPCToons.createLocalNPC(91915) self.npc.reparentTo(base.localAvatar) self.npc.setZ(30) self.npc.hide() self.piano = loader.loadModel('phase_5/models/props/piano-mod') self.piano.setZ(250) self.piano.setHpr(0, 90, 0) self.piano.reparentTo(base.localAvatar) self.piano.setScale(0) self.pianoSfx = base.loadSfx('phase_5/audio/sfx/AA_drop_piano.ogg') self.dropSfx = base.loadSfx('phase_5/audio/sfx/cogbldg_drop.ogg') self.pianoDropSound = Sequence( Func(base.playSfx, self.dropSfx), Wait(6.7), Func(base.playSfx, self.pianoSfx), Func(base.localAvatar.b_setAnimState, 'Squish'), Wait(2.5), Func(self.pianoSfx.stop)) self.pianoDropSequence = Sequence( Wait(randint(10, 60)), Func(self.pianoDropSound.start), Parallel(self.piano.scaleInterval(1, (3, 3, 3)), self.piano.posInterval(7, (0, 0, 0))), self.piano.posInterval(0.1, (0, 0, 0.5)), self.piano.posInterval(0.1, (0, 0, 0)), Wait(0.4), Parallel( Func(self.npc.addActive), Func(self.npc.setChatAbsolute, 'Whoops! My bad!', CFSpeech | CFTimeout)), self.piano.scaleInterval(1, (0, 0, 0)), Wait(5), Func(self.npc.removeActive)) self.pianoDropSequence.loop()
def enter(self, requestStatus, visibilityFlag=1, arrowsOn=1): teleportDebug(requestStatus, "Street.enter(%s)" % (requestStatus,)) self._ttfToken = None self.fsm.enterInitialState() base.playMusic(self.loader.music, looping=1, volume=0.8) self.loader.geom.reparentTo(render) if visibilityFlag: self.visibilityOn() base.localAvatar.setGeom(self.loader.geom) base.localAvatar.setOnLevelGround(1) self._telemLimiter = TLGatherAllAvs("Street", RotationLimitToH) NametagGlobals.setWant2dNametags(arrowsOn) self.zone = ZoneUtil.getBranchZone(requestStatus["zoneId"]) def __lightDecorationOn__(): geom = base.cr.playGame.getPlace().loader.geom self.halloweenLights = geom.findAllMatches("**/*light*") self.halloweenLights += geom.findAllMatches("**/*lamp*") self.halloweenLights += geom.findAllMatches("**/prop_snow_tree*") for light in self.halloweenLights: light.setColorScaleOff(1) newsManager = base.cr.newsManager if newsManager: holidayIds = base.cr.newsManager.getDecorationHolidayId() if ( ToontownGlobals.HALLOWEEN_COSTUMES in holidayIds or ToontownGlobals.SPOOKY_COSTUMES in holidayIds ) and self.loader.hood.spookySkyFile: lightsOff = Sequence( LerpColorScaleInterval(base.cr.playGame.hood.loader.geom, 0.1, Vec4(0.55, 0.55, 0.65, 1)), Func(self.loader.hood.startSpookySky), ) lightsOff.start() else: self.loader.hood.startSky() lightsOn = LerpColorScaleInterval(base.cr.playGame.hood.loader.geom, 0.1, Vec4(1, 1, 1, 1)) lightsOn.start() else: self.loader.hood.startSky() lightsOn = LerpColorScaleInterval(base.cr.playGame.hood.loader.geom, 0.1, Vec4(1, 1, 1, 1)) lightsOn.start() self.accept("doorDoneEvent", self.handleDoorDoneEvent) self.accept("DistributedDoor_doorTrigger", self.handleDoorTrigger) self.enterZone(requestStatus["zoneId"]) self.tunnelOriginList = base.cr.hoodMgr.addLinkTunnelHooks(self, self.loader.nodeList, self.zoneId) self.fsm.request(requestStatus["how"], [requestStatus]) self.replaceStreetSignTextures() return
def doEnterZone(self, newZoneId): if self.zoneId != None: for i in self.loader.nodeDict[self.zoneId]: if newZoneId: if i not in self.loader.nodeDict[newZoneId]: self.loader.fadeOutDict[i].start() self.loader.exitAnimatedProps(i) else: i.stash() self.loader.exitAnimatedProps(i) if newZoneId != None: for i in self.loader.nodeDict[newZoneId]: if self.zoneId: if i not in self.loader.nodeDict[self.zoneId]: self.loader.fadeInDict[i].start() self.loader.enterAnimatedProps(i) i.unstash() else: if self.loader.fadeOutDict[i].isPlaying(): self.loader.fadeOutDict[i].finish() if self.loader.fadeInDict[i].isPlaying(): self.loader.fadeInDict[i].finish() self.loader.enterAnimatedProps(i) i.unstash() if newZoneId != self.zoneId: if visualizeZones: if self.zoneId != None: self.loader.zoneDict[self.zoneId].clearColor() if newZoneId != None: self.loader.zoneDict[newZoneId].setColor(0, 0, 1, 1, 100) if newZoneId is not None: loader = base.cr.playGame.getPlace().loader if newZoneId != None: visZones = [self.loader.nodeToZone[x] for x in self.loader.nodeDict[newZoneId]] visZones.append(ZoneUtil.getBranchZone(newZoneId)) base.cr.sendSetZoneMsg(newZoneId, visZones) self.notify.debug('Entering Zone %d' % newZoneId) self.zoneId = newZoneId geom = base.cr.playGame.getPlace().loader.geom self.eventLights = geom.findAllMatches('**/*light*') self.eventLights += geom.findAllMatches('**/*lamp*') self.eventLights += geom.findAllMatches('**/prop_snow_tree*') self.eventLights += geom.findAllMatches('**/prop_tree*') self.eventLights += geom.findAllMatches('**/*christmas*') for light in self.eventLights: light.setColorScaleOff(1)
def load(self, zoneId): self.zoneId = zoneId self.parentFSMState.addChild(self.fsm) self.loadBattleAnims() self.branchZone = ZoneUtil.getBranchZone(zoneId) self.canonicalBranchZone = ZoneUtil.getCanonicalBranchZone(zoneId) self.music = base.loader.loadMusic(self.musicFile) self.activityMusic = base.loader.loadMusic(self.activityMusicFile) if not self.battleMusic: self.battleMusic = base.loader.loadMusic( 'phase_3.5/audio/bgm/encntr_general_bg.ogg') self.townBattle = TownBattle.TownBattle(self.townBattleDoneEvent) self.townBattle.load() if base.cr.newsManager: if base.cr.newsManager.isHolidayRunning(APRIL_FOOLS_COSTUMES): taskMgr.doMethodLater(randint(10, 60), self.pianoDropTask, 'piano-drop-task')
def __teleportOutDone(self, requestStatus): hoodId = requestStatus['hoodId'] zoneId = requestStatus['zoneId'] shardId = requestStatus['shardId'] if hoodId == self.loader.hood.id and shardId == None: if zoneId == self.zoneId: self.fsm.request('teleportIn', [requestStatus]) elif requestStatus['where'] == 'street' and ZoneUtil.getBranchZone(zoneId) == self.loader.branchZone: self.fsm.request('quietZone', [requestStatus]) else: self.doneStatus = requestStatus messenger.send(self.doneEvent) elif hoodId == ToontownGlobals.MyEstate: self.getEstateZoneAndGoHome(requestStatus) else: self.doneStatus = requestStatus messenger.send(self.doneEvent)
def _Street__teleportOutDone(self, requestStatus): hoodId = requestStatus["hoodId"] zoneId = requestStatus["zoneId"] shardId = requestStatus["shardId"] if hoodId == self.loader.hood.id and shardId == None: if zoneId == self.zoneId: self.fsm.request("teleportIn", [requestStatus]) elif requestStatus["where"] == "street" and ZoneUtil.getBranchZone(zoneId) == self.loader.branchZone: self.fsm.request("quietZone", [requestStatus]) else: self.doneStatus = requestStatus messenger.send(self.doneEvent) elif hoodId == ToontownGlobals.MyEstate: self.getEstateZoneAndGoHome(requestStatus) else: self.doneStatus = requestStatus messenger.send(self.doneEvent)
def load(self, zoneId): self.zoneId = zoneId self.parentFSMState.addChild(self.fsm) self.loadBattleAnims() self.branchZone = ZoneUtil.getBranchZone(zoneId) self.canonicalBranchZone = ZoneUtil.getCanonicalBranchZone(zoneId) self.music = base.loadMusic(self.musicFile) self.activityMusic = base.loadMusic(self.activityMusicFile) self.battleMusic = base.loadMusic('phase_3.5/audio/bgm/encntr_general_tt.ogg') self.townBattle = TownBattle.TownBattle(self.townBattleDoneEvent) self.townBattle.load() if config.GetBool('want-april-toons', 0): self.npc = NPCToons.createLocalNPC(91915) self.npc.reparentTo(base.localAvatar) self.npc.setZ(30) self.npc.hide() self.piano = loader.loadModel('phase_5/models/props/piano-mod') self.piano.setZ(250) self.piano.setHpr(0, 90, 0) self.piano.reparentTo(base.localAvatar) self.piano.setScale(0) self.pianoSfx = base.loadSfx('phase_5/audio/sfx/AA_drop_piano.ogg') self.dropSfx = base.loadSfx('phase_5/audio/sfx/cogbldg_drop.ogg') self.pianoDropSound = Sequence( Func(base.playSfx, self.dropSfx), Wait(6.7), Func(base.playSfx, self.pianoSfx), Func(base.localAvatar.b_setAnimState, 'Squish'), Wait(2.5), Func(self.pianoSfx.stop) ) self.pianoDropSequence = Sequence( Wait(randint(10, 60)), Func(self.pianoDropSound.start), Parallel(self.piano.scaleInterval(1, (3, 3, 3)), self.piano.posInterval(7, (0, 0, 0))), self.piano.posInterval(0.1, (0, 0, 0.5)), self.piano.posInterval(0.1, (0, 0, 0)), Wait(0.4), Parallel(Func(self.npc.addActive), Func(self.npc.setChatAbsolute, 'Whoops! My bad!', CFSpeech|CFTimeout)), self.piano.scaleInterval(1, (0, 0, 0)), Wait(5), Func(self.npc.removeActive) ) self.pianoDropSequence.loop()
def toonKilledBuilding(self, toon, type, difficulty, floors, zoneId, activeToons): flattenedQuests = toon.getQuests() questList = [] #unflattened zoneId = ZoneUtil.getBranchZone(zoneId) recoveredItems = [] unrecoveredItems = [] for i in xrange(0, len(flattenedQuests), 5): questDesc = flattenedQuests[i : i + 5] questClass = Quests.getQuest(questDesc[0]) if questClass.getCompletionStatus(toon, questDesc) == Quests.INCOMPLETE: if isinstance(questClass, Quests.BuildingQuest): if questClass.isLocationMatch(zoneId): if questClass.getBuildingTrack() == type or Quests.Any: if questClass.doesBuildingCount(toon, activeToons): if floors >= questClass.getNumFloors(): questDesc[4] += 1 questList.append(questDesc) toon.b_setQuests(questList)
def handleInterests(self): dnaStore = DNAStorage() dnaFileName = self.genDNAFileName(self.zoneId) loadDNAFileAI(dnaStore, dnaFileName) self.zoneVisDict = {} for i in xrange(dnaStore.getNumDNAVisGroupsAI()): groupFullName = dnaStore.getDNAVisGroupName(i) visGroup = dnaStore.getDNAVisGroupAI(i) visZoneId = int(base.cr.hoodMgr.extractGroupName(groupFullName)) visZoneId = ZoneUtil.getTrueZoneId(visZoneId, self.zoneId) visibles = [] for i in xrange(visGroup.getNumVisibles()): visibles.append(int(visGroup.getVisibleName(i))) visibles.append(ZoneUtil.getBranchZone(visZoneId)) self.zoneVisDict[visZoneId] = visibles base.cr.sendSetZoneMsg(self.zoneId, self.zoneVisDict.values()[0])
def __teleportOutDone(self, requestStatus): hoodId = requestStatus['hoodId'] zoneId = requestStatus['zoneId'] shardId = requestStatus['shardId'] if hoodId == self.loader.hood.id and shardId == None: if zoneId == self.zoneId: self.fsm.request('teleportIn', [requestStatus]) elif requestStatus['where'] == 'street' and ZoneUtil.getBranchZone(zoneId) == self.loader.branchZone: self.fsm.request('quietZone', [requestStatus]) else: self.doneStatus = requestStatus messenger.send(self.doneEvent) elif hoodId == ToontownGlobals.MyEstate: self.getEstateZoneAndGoHome(requestStatus) else: self.doneStatus = requestStatus messenger.send(self.doneEvent) return
def announceGenerate(self): DistributedEvent.announceGenerate(self) dnaStore = DNAStorage() dnaFileToLoad = 'phase_4/dna/toontown_central_old_sz.pdna' loadDNAFileAI(dnaStore, dnaFileToLoad) zoneVisDict = {} for i in xrange(dnaStore.getNumDNAVisGroupsAI()): groupFullName = dnaStore.getDNAVisGroupName(i) visGroup = dnaStore.getDNAVisGroupAI(i) visZoneId = int(base.cr.hoodMgr.extractGroupName(groupFullName)) visibles = [] for i in xrange(visGroup.getNumVisibles()): visibles.append(int(visGroup.visibles[i])) visibles.append(ZoneUtil.getBranchZone(visZoneId)) zoneVisDict[visZoneId] = visibles self.cr.sendSetZoneMsg(self.zoneId, zoneVisDict.values()[0])
def toonKilledBuilding(self, toon, type, difficulty, floors, zoneId, activeToons): flattenedQuests = toon.getQuests() questList = [] #unflattened zoneId = ZoneUtil.getBranchZone(zoneId) recoveredItems = [] unrecoveredItems = [] for i in xrange(0, len(flattenedQuests), 5): questDesc = flattenedQuests[i : i + 5] questClass = Quests.getQuest(questDesc[0]) if questClass.getCompletionStatus(toon, questDesc) == Quests.INCOMPLETE: if isinstance(questClass, Quests.BuildingQuest): if questClass.isLocationMatch(zoneId): if questClass.getBuildingTrack() == type or Quests.Any: if questClass.doesBuildingCount(toon, activeToons): if floors >= questClass.getNumFloors(): questDesc[4] += 1 questList.append(questDesc) toon.b_setQuests(questList)
def enter(self, requestStatus): self.zoneId = requestStatus['zoneId'] # Load the CogHQ DNA file: dnaStore = DNAStorage() dnaFileName = self.genDNAFileName(self.zoneId) if not dnaFileName.endswith('13200.pdna'): loadDNAFileAI(dnaStore, dnaFileName) # Collect all of the vis group zone IDs: self.zoneVisDict = {} for i in range(dnaStore.getNumDNAVisGroupsAI()): groupFullName = dnaStore.getDNAVisGroupName(i) visGroup = dnaStore.getDNAVisGroupAI(i) visZoneId = int( base.cr.hoodMgr.extractGroupName(groupFullName)) visZoneId = ZoneUtil.getTrueZoneId(visZoneId, self.zoneId) visibles = [] for i in range(visGroup.getNumVisibles()): visibles.append(int(visGroup.visibles[i])) visibles.append(ZoneUtil.getBranchZone(visZoneId)) self.zoneVisDict[visZoneId] = visibles # Next, we want interest in all vis groups due to this being a Cog HQ: base.cr.sendSetZoneMsg(self.zoneId, list(self.zoneVisDict.values())[0]) BattlePlace.BattlePlace.enter(self) self.fsm.enterInitialState() base.playMusic(self.loader.music, looping=1, volume=0.8) self.loader.geom.reparentTo(render) self.nodeList = [self.loader.geom] self.loader.hood.startSky() self._telemLimiter = TLGatherAllAvs('FactoryExterior', RotationLimitToH) self.accept('doorDoneEvent', self.handleDoorDoneEvent) self.accept('DistributedDoor_doorTrigger', self.handleDoorTrigger) NametagGlobals.setWant2dNametags(True) self.tunnelOriginList = base.cr.hoodMgr.addLinkTunnelHooks( self, self.nodeList, self.zoneId) how = requestStatus['how'] self.fsm.request(how, [requestStatus])
def toonKilledBuilding(self, av, type, difficulty, floors, zoneId, cogdo): # Get the avatars current quests. messenger.send('topToonsManager-event', [av.doId, TopToonsGlobals.CAT_BLDG, 1]) avQuests = av.getQuests() questList = [] zoneId = ZoneUtil.getBranchZone(zoneId) # Iterate through the avatars current quests. for i in xrange(0, len(avQuests), 5): questDesc = avQuests[i : i + 5] questClass = Quests.getQuest(questDesc[QuestIdIndex]) if isinstance(questClass, Quests.BuildingQuest) and questClass.getCompletionStatus(av, questDesc) == Quests.INCOMPLETE: if questClass.isLocationMatch(zoneId) and questClass.doesBuildingTypeCount(type): if questClass.isCogdo() == cogdo: if floors >= questClass.getNumFloors(): questDesc[QuestProgressIndex] += 1 questList.append(questDesc) av.b_setQuests(questList)
def toonKilledBuilding(self, av, type, difficulty, floors, zoneId, activeToons): avQuests = av.getQuests() questList = [] zoneId = ZoneUtil.getBranchZone(zoneId) for i in xrange(0, len(avQuests), 5): questDesc = avQuests[i:i + 5] questClass = Quests.getQuest(questDesc[QuestIdIndex]) if questClass.getCompletionStatus(av, questDesc) == Quests.INCOMPLETE: if isinstance(questClass, Quests.BuildingQuest): if questClass.isLocationMatch(zoneId): if questClass.doesBuildingTypeCount(type): if questClass.doesBuildingCount(av, activeToons): if floors >= questClass.getNumFloors(): questDesc[QuestProgressIndex] += 1 questList.append(questDesc) av.b_setQuests(questList)
def recoverItems(self, av, suits, zoneId): zoneId = ZoneUtil.getBranchZone(zoneId) quests = av.getQuests() newQuests = [] recovered = [] unrecovered = [] for i in xrange(0, len(quests), 5): quest = quests[i:i + 5] klass = Quests.getQuest(quest[0]) if klass.getCompletionStatus(av, quest) == Quests.INCOMPLETE: if isinstance(klass, Quests.RecoverItemQuest): if klass.getHolder() != Quests.AnyFish: item = klass.getItem() for suit in suits: if klass.getCompletionStatus( av, quest) == Quests.COMPLETE: break if klass.doesCogCount(av.doId, suit, zoneId, suit['activeToons']): if random.random( ) <= klass.getPercentChance() / 100.0: quest[4] += 1 recovered.append(item) else: unrecovered.append(item) else: self.notify.debug( "Recover: Suit %s at %s does not count" % (suit, zoneId)) newQuests.append(quest) av.b_setQuests(newQuests) return recovered, unrecovered
def begin(self, range, label, gui, tipCategory, zoneId): self.waitBar['range'] = range self.title['text'] = label loadingScreenTex = self.zone2picture.get( ZoneUtil.getBranchZone(zoneId), self.defaultTex) self.background = loader.loadTexture(loadingScreenTex) self.__count = 0 self.__expectedCount = range if gui: if base.localAvatarStyle: from toontown.toon import Toon self.toon = Toon.Toon() self.toon.setDNA(base.localAvatarStyle) self.toon.loop('bored', fromFrame=135, toFrame=135) self.toon.getGeomNode().setDepthWrite(1) self.toon.getGeomNode().setDepthTest(1) self.toon.setHpr(205, 0, 0) self.toon.setScale(0.18) self.toon.setPos(base.a2dBottomRight.getX() / 1.25, 0, -0.034) self.toon.reparentTo(self.waitBar) self.waitBar['frameSize'] = (base.a2dLeft + (base.a2dRight / 8.15), base.a2dRight - (base.a2dRight / 2.57), -0.03, 0.03) self.title.reparentTo(base.a2dpBottomLeft, LOADING_SCREEN_SORT_INDEX) self.title.setPos(0.24, 0, 0.23) self.gui.setPos(0, -0.1, 0) self.gui.reparentTo(aspect2d, LOADING_SCREEN_SORT_INDEX) self.gui.setTexture(self.background, 1) if loadingScreenTex == self.defaultTex: self.logo.reparentTo(base.a2dpTopCenter, LOADING_SCREEN_SORT_INDEX) else: self.title.reparentTo(base.a2dpBottomLeft, LOADING_SCREEN_SORT_INDEX) self.gui.reparentTo(hidden) self.logo.reparentTo(hidden) self.waitBar.reparentTo(base.a2dpBottomCenter, LOADING_SCREEN_SORT_INDEX) self.waitBar.update(self.__count)
def toonKilledCogdo(self, av, type, difficulty, zoneId, activeToons): self.notify.debug( "toonKilledCogdo(%s, '%s', %s, %d, %s)" % (str(av), type, str(difficulty), zoneId, str(activeToons))) avQuests = av.getQuests() questList = [] zoneId = ZoneUtil.getBranchZone(zoneId) for i in xrange(0, len(avQuests), 5): questDesc = avQuests[i:i + 5] questClass = Quests.getQuest(questDesc[QuestIdIndex]) if questClass.getCompletionStatus(av, questDesc) == Quests.INCOMPLETE: if isinstance(questClass, Quests.CogdoQuest): if questClass.isLocationMatch(zoneId): if questClass.doesCogdoTypeCount(type): if questClass.doesCogdoCount(av, activeToons): questDesc[QuestProgressIndex] += 1 questList.append(questDesc) av.b_setQuests(questList)
def enter(self, requestStatus): CogHQExterior.CogHQExterior.enter(self, requestStatus) self.loader.hood.startSky() dnaStore = DNAStorage() dnaFileName = self.genDNAFileName(self.zoneId) loadDNAFileAI(dnaStore, dnaFileName) self.zoneVisDict = {} for i in xrange(dnaStore.getNumDNAVisGroupsAI()): groupFullName = dnaStore.getDNAVisGroupName(i) visGroup = dnaStore.getDNAVisGroupAI(i) visZoneId = int(base.cr.hoodMgr.extractGroupName(groupFullName)) visZoneId = ZoneUtil.getTrueZoneId(visZoneId, self.zoneId) visibles = [] for i in xrange(visGroup.getNumVisibles()): visibles.append(int(visGroup.visibles[i])) visibles.append(ZoneUtil.getBranchZone(visZoneId)) self.zoneVisDict[visZoneId] = visibles base.cr.sendSetZoneMsg(self.zoneId, self.zoneVisDict.values()[0])
def toonKilledBuilding(self, av, type, difficulty, floors, zoneId, activeToons): # Get the avatars current quests. avQuests = av.getQuests() questList = [] zoneId = ZoneUtil.getBranchZone(zoneId) # Iterate through the avatars current quests. for i in xrange(0, len(avQuests), 5): questDesc = avQuests[i : i + 5] questClass = Quests.getQuest(questDesc[QuestIdIndex]) if questClass.getCompletionStatus(av, questDesc) == Quests.INCOMPLETE: if isinstance(questClass, Quests.BuildingQuest): if questClass.isLocationMatch(zoneId): if questClass.doesBuildingTypeCount(type): if questClass.doesBuildingCount(av, activeToons): if floors >= questClass.getNumFloors(): questDesc[QuestProgressIndex] += 1 questList.append(questDesc) av.b_setQuests(questList)
def recoverItems(self, av, suitsKilled, taskZoneId): # Get the avatars current quests. avQuests = av.getQuests() questList = [] recoveredItems = [] unrecoveredItems = [] taskZoneId = ZoneUtil.getBranchZone(taskZoneId) # Iterate through the avatars current quests. for i in xrange(0, len(avQuests), 5): questDesc = avQuests[i:i + 5] questClass = Quests.getQuest(questDesc[QuestIdIndex]) if questClass.getCompletionStatus(av, questDesc) == Quests.INCOMPLETE: if isinstance(questClass, Quests.CogQuest): for suit in suitsKilled: if questClass.doesCogCount(av.doId, suit, taskZoneId, suit['activeToons']): questDesc[QuestProgressIndex] += 1 elif isinstance(questClass, Quests.RecoverItemQuest): if questClass.getHolder() != Quests.AnyFish: for suit in suitsKilled: if questClass.doesCogCount(av.doId, suit, taskZoneId, suit['activeToons']): baseChance = questClass.getPercentChance() amountRemaining = questClass.getNumItems( ) - questDesc[QuestProgressIndex] chance = Quests.calcRecoverChance( amountRemaining, baseChance) if chance >= baseChance: questDesc[QuestProgressIndex] += 1 recoveredItems.append(questClass.getItem()) else: unrecoveredItems.append( questClass.getItem()) questList.append(questDesc) av.b_setQuests(questList) return (recoveredItems, unrecoveredItems)
def handleInterests(self): # First, we need to load the DNA file for this Cog HQ. dnaStore = DNAStorage() dnaFileName = self.genDNAFileName(self.zoneId) loadDNAFileAI(dnaStore, dnaFileName) # Next, we need to collect all of the visgroup zone IDs. self.zoneVisDict = {} for i in xrange(dnaStore.getNumDNAVisGroupsAI()): groupFullName = dnaStore.getDNAVisGroupName(i) visGroup = dnaStore.getDNAVisGroupAI(i) visZoneId = int(base.cr.hoodMgr.extractGroupName(groupFullName)) visZoneId = ZoneUtil.getTrueZoneId(visZoneId, self.zoneId) visibles = [] for i in xrange(visGroup.getNumVisibles()): visibles.append(int(visGroup.getVisibleName(i))) visibles.append(ZoneUtil.getBranchZone(visZoneId)) self.zoneVisDict[visZoneId] = visibles # Finally, we want interest in all visgroups due to this being a Cog HQ. base.cr.sendSetZoneMsg(self.zoneId, self.zoneVisDict.values()[0])
def enter(self, requestStatus): self.zoneId = requestStatus["zoneId"] # Load the CogHQ DNA file: dnaStore = DNAStorage() dnaFileName = self.genDNAFileName(self.zoneId) if not dnaFileName.endswith("13200.pdna"): loadDNAFileAI(dnaStore, dnaFileName) # Collect all of the vis group zone IDs: self.zoneVisDict = {} for i in xrange(dnaStore.getNumDNAVisGroupsAI()): groupFullName = dnaStore.getDNAVisGroupName(i) visGroup = dnaStore.getDNAVisGroupAI(i) visZoneId = int(base.cr.hoodMgr.extractGroupName(groupFullName)) visibles = [] for i in xrange(visGroup.getNumVisibles()): visibles.append(int(visGroup.getVisible(i))) visibles.append(ZoneUtil.getBranchZone(visZoneId)) self.zoneVisDict[visZoneId] = visibles # Next, we want interest in all vis groups due to this being a Cog HQ: base.cr.sendSetZoneMsg(self.zoneId, self.zoneVisDict.values()[0]) BattlePlace.BattlePlace.enter(self) self.fsm.enterInitialState() base.playMusic(self.loader.music, looping=1, volume=0.8) self.loader.geom.reparentTo(render) self.nodeList = [self.loader.geom] self.loader.hood.startSky() self._telemLimiter = TLGatherAllAvs("FactoryExterior", RotationLimitToH) self.accept("doorDoneEvent", self.handleDoorDoneEvent) self.accept("DistributedDoor_doorTrigger", self.handleDoorTrigger) NametagGlobals.setMasterArrowsOn(1) self.tunnelOriginList = base.cr.hoodMgr.addLinkTunnelHooks(self, self.nodeList) how = requestStatus["how"] self.fsm.request(how, [requestStatus])
def toonKilledBuilding(self, av, type, difficulty, floors, zoneId, cogdo): # Get the avatars current quests. messenger.send("topToonsManager-event", [av.doId, TopToonsGlobals.CAT_BLDG, 1]) avQuests = av.getQuests() questList = [] zoneId = ZoneUtil.getBranchZone(zoneId) # Iterate through the avatars current quests. for i in xrange(0, len(avQuests), 5): questDesc = avQuests[i : i + 5] questClass = Quests.getQuest(questDesc[QuestIdIndex]) if ( isinstance(questClass, Quests.BuildingQuest) and questClass.getCompletionStatus(av, questDesc) == Quests.INCOMPLETE ): if questClass.isLocationMatch(zoneId) and questClass.doesBuildingTypeCount(type): if questClass.isCogdo() == cogdo: if floors >= questClass.getNumFloors(): questDesc[QuestProgressIndex] += 1 questList.append(questDesc) av.b_setQuests(questList)
def enter(self, requestStatus): CogHQExterior.CogHQExterior.enter(self, requestStatus) # Load the CogHQ DNA file: dnaStore = DNAStorage() dnaFileName = self.genDNAFileName(self.zoneId) loadDNAFileAI(dnaStore, dnaFileName) # Collect all of the vis group zone IDs: self.zoneVisDict = {} for i in xrange(dnaStore.getNumDNAVisGroupsAI()): groupFullName = dnaStore.getDNAVisGroupName(i) visGroup = dnaStore.getDNAVisGroupAI(i) visZoneId = int(base.cr.hoodMgr.extractGroupName(groupFullName)) visZoneId = ZoneUtil.getTrueZoneId(visZoneId, self.zoneId) visibles = [] for i in xrange(visGroup.getNumVisibles()): visibles.append(int(visGroup.getVisible(i))) visibles.append(ZoneUtil.getBranchZone(visZoneId)) self.zoneVisDict[visZoneId] = visibles # Next, we want interest in all vis groups due to this being a Cog HQ: base.cr.sendSetZoneMsg(self.zoneId, self.zoneVisDict.values()[0])
def enter(self, requestStatus): self.zoneId = requestStatus['zoneId'] if self.zoneId != ToontownGlobals.LawbotOfficeExt and self.zoneId != ToontownGlobals.SellbotWestWing and self.zoneId not in ToontownGlobals.ShortWorkZones: dnaStore = DNAStorage() dnaFileName = self.genDNAFileName(self.zoneId) loadDNAFileAI(dnaStore, dnaFileName) self.zoneVisDict = {} for i in xrange(dnaStore.getNumDNAVisGroupsAI()): groupFullName = dnaStore.getDNAVisGroupName(i) visGroup = dnaStore.getDNAVisGroupAI(i) visZoneId = int( base.cr.hoodMgr.extractGroupName(groupFullName)) visZoneId = ZoneUtil.getTrueZoneId(visZoneId, self.zoneId) visibles = [] for i in xrange(visGroup.getNumVisibles()): visibles.append(int(visGroup.visibles[i])) visibles.append(ZoneUtil.getBranchZone(visZoneId)) self.zoneVisDict[visZoneId] = visibles base.cr.sendSetZoneMsg(self.zoneId, self.zoneVisDict.values()[0]) BattlePlace.BattlePlace.enter(self) self.fsm.enterInitialState() base.playMusic(self.loader.music, looping=1, volume=0.8) self.loader.geom.reparentTo(render) if self.loader.factGeom: self.loader.factGeom.reparentTo(render) self.nodeList = [self.loader.geom] self.loader.hood.startSky() self._telemLimiter = TLGatherAllAvs('FactoryExterior', RotationLimitToH) self.accept('doorDoneEvent', self.handleDoorDoneEvent) self.accept('DistributedDoor_doorTrigger', self.handleDoorTrigger) NametagGlobals.setMasterArrowsOn(1) self.tunnelOriginList = base.cr.hoodMgr.addLinkTunnelHooks( self, self.nodeList, self.zoneId) how = requestStatus['how'] self.fsm.request(how, [requestStatus])
def toonCaughtFishingItem(self, av, zoneId): # Get the avatars current quests. avQuests = av.getQuests() fishingItem = -1 questList = [] zoneId = ZoneUtil.getBranchZone(zoneId) # Iterate through their current quests. for i in range(0, len(avQuests), 5): questDesc = avQuests[i : i + 5] questClass = Quests.getQuest(questDesc[QuestIdIndex]) if fishingItem != -1: questList.append(questDesc) continue if isinstance(questClass, Quests.RecoverItemQuest): if not hasattr(questClass, 'getItem'): questList.append(questDesc) continue # Check if we're in the correct zone for the task if questClass.isLocationMatch(zoneId): if questClass.getHolder() == Quests.AnyFish: if not questClass.getCompletionStatus(av, questDesc) == Quests.COMPLETE: baseChance = questClass.getPercentChance() amountRemaining = questClass.getNumItems() - questDesc[QuestProgressIndex] chance = Quests.calcRecoverChance(amountRemaining, baseChance) if chance >= baseChance: questDesc[QuestProgressIndex] += 1 fishingItem = questClass.getItem() questList.append(questDesc) av.b_setQuests(questList) return fishingItem
def recoverItems(self, av, suits, zoneId): zoneId = ZoneUtil.getBranchZone(zoneId) quests = av.getQuests() newQuests = [] recovered = [] unrecovered = [] for i in xrange(0, len(quests), 5): quest = quests[i:i + 5] klass = Quests.getQuest(quest[0]) if klass.getCompletionStatus(av, quest) == Quests.INCOMPLETE: if isinstance(klass, Quests.RecoverItemQuest): if klass.getHolder() != Quests.AnyFish: item = klass.getItem() for suit in suits: if klass.getCompletionStatus(av, quest) == Quests.COMPLETE: break if klass.doesCogCount(av.doId, suit, zoneId, suit['activeToons']): if random.random() <= klass.getPercentChance() / 100.0: quest[4] += 1 recovered.append(item) else: unrecovered.append(item) else: self.notify.debug("Recover: Suit %s at %s does not count" % (suit, zoneId)) newQuests.append(quest) av.b_setQuests(newQuests) return recovered, unrecovered
def begin(self, range, label, gui, tipCategory, zoneId): self.waitBar['range'] = range self.title['text'] = label if ToontownGlobals.BossbotHQ <= zoneId <= ToontownGlobals.LawbotHQ: self.title['text_font'] = ToontownGlobals.getSuitFont() else: self.title['text_font'] = ToontownGlobals.getSignFont() loadingScreenTex = self.zone2picture.get(ZoneUtil.getBranchZone(zoneId), self.defaultTex) self.background = loader.loadTexture(loadingScreenTex) self.__count = 0 self.__expectedCount = range if gui: self.title.setPos(0, 0, 0.26) self.gui.setPos(0, -0.1, 0) self.gui.reparentTo(aspect2d, LOADING_SCREEN_SORT_INDEX) self.gui.setTexture(self.background, 1) if loadingScreenTex == self.defaultTex: self.logo.reparentTo(base.a2dpTopCenter, LOADING_SCREEN_SORT_INDEX) else: self.gui.reparentTo(hidden) self.logo.reparentTo(hidden) self.title.reparentTo(base.a2dpBottomCenter, LOADING_SCREEN_SORT_INDEX) self.waitBar.reparentTo(base.a2dpBottomCenter, LOADING_SCREEN_SORT_INDEX) self.waitBar.update(self.__count)
def update(self, questDesc): questId, fromNpcId, toNpcId, rewardId, toonProgress = questDesc quest = Quests.getQuest(questId) if quest == None: self.notify.warning('Tried to display poster for unknown quest %s' % questId) return if rewardId == Quests.NA: finalReward = Quests.getFinalRewardId(questId, fAll=1) transformedReward = Quests.transformReward(finalReward, base.localAvatar) reward = Quests.getReward(transformedReward) else: reward = Quests.getReward(rewardId) if reward and questId not in Quests.NoRewardTierZeroQuests: rewardString = reward.getPosterString() else: rewardString = '' self.rewardText['text'] = rewardString self.fitLabel(self.rewardText) if Quests.isQuestJustForFun(questId, rewardId): self.funQuest.show() else: self.funQuest.hide() if self._deleteCallback: self.showDeleteButton(questDesc) else: self.hideDeleteButton() fComplete = quest.getCompletionStatus(base.localAvatar, questDesc) == Quests.COMPLETE if Quests.isQuestJustForFun(questId, rewardId): if fComplete: self.funQuest.hide() if toNpcId == Quests.ToonHQ: toNpcName = TTLocalizer.QuestPosterHQOfficer toNpcBuildingName = TTLocalizer.QuestPosterHQBuildingName toNpcStreetName = TTLocalizer.QuestPosterHQStreetName toNpcLocationName = TTLocalizer.QuestPosterHQLocationName elif toNpcId == Quests.ToonTailor: toNpcName = TTLocalizer.QuestPosterTailor toNpcBuildingName = TTLocalizer.QuestPosterTailorBuildingName toNpcStreetName = TTLocalizer.QuestPosterTailorStreetName toNpcLocationName = TTLocalizer.QuestPosterTailorLocationName else: toNpcName = NPCToons.getNPCName(toNpcId) toNpcZone = NPCToons.getNPCZone(toNpcId) toNpcHoodId = ZoneUtil.getCanonicalHoodId(toNpcZone) toNpcLocationName = base.cr.hoodMgr.getFullnameFromId(toNpcHoodId) toNpcBuildingName = NPCToons.getBuildingTitle(toNpcZone) toNpcBranchId = ZoneUtil.getBranchZone(toNpcZone) toNpcStreetName = ZoneUtil.getStreetName(toNpcBranchId) lPos = Vec3(0, 0, 0.13) lIconGeom = None lIconGeomScale = 1 rIconGeom = None rIconGeomScale = 1 infoText = '' infoZ = TTLocalizer.QPinfoZ auxText = None auxTextPos = Vec3(0, 0, 0.12) headlineString = quest.getHeadlineString() objectiveStrings = quest.getObjectiveStrings() captions = map(lambda x: str(x).title(), quest.getObjectiveStrings()) imageColor = Vec4(*self.colors['white']) if quest.getType() == Quests.DeliverGagQuest or quest.getType() == Quests.DeliverItemQuest: frameBgColor = 'red' if quest.getType() == Quests.DeliverGagQuest: invModel = loader.loadModel('phase_3.5/models/gui/inventory_icons') track, item = quest.getGagType() lIconGeom = invModel.find('**/' + AvPropsNew[track][item]) invModel.removeNode() else: bookModel = loader.loadModel('phase_3.5/models/gui/stickerbook_gui') lIconGeom = bookModel.find('**/package') lIconGeomScale = 0.12 bookModel.removeNode() if not fComplete: captions.append(toNpcName) auxText = TTLocalizer.QuestPosterAuxTo auxTextPos.setZ(0.12) lPos.setX(-0.18) infoText = TTLocalizer.QuestPageDestination % (toNpcBuildingName, toNpcStreetName, toNpcLocationName) rIconGeom = self.createNpcToonHead(toNpcId) rIconGeomScale = IMAGE_SCALE_SMALL elif quest.getType() == Quests.RecoverItemQuest: frameBgColor = 'green' bookModel = loader.loadModel('phase_3.5/models/gui/stickerbook_gui') lIconGeom = bookModel.find('**/package') lIconGeomScale = 0.12 bookModel.removeNode() if not fComplete: rIconGeomScale = IMAGE_SCALE_SMALL holder = quest.getHolder() holderType = quest.getHolderType() if holder == Quests.Any: cogIcons = loader.loadModel('phase_3/models/gui/cog_icons') rIconGeom = cogIcons.find('**/cog') cogIcons.removeNode() lPos.setX(-0.18) auxText = TTLocalizer.QuestPosterAuxFrom elif holder == Quests.AnyFish: headlineString = TTLocalizer.QuestPosterFishing auxText = TTLocalizer.QuestPosterAuxFor auxTextPos.setX(-0.18) captions = captions[:1] else: if holderType == 'track': cogIcons = loader.loadModel('phase_3/models/gui/cog_icons') if holder == 'c': icon = cogIcons.find('**/CorpIcon') elif holder == 's': icon = cogIcons.find('**/SalesIcon') elif holder == 'l': icon = cogIcons.find('**/LegalIcon') elif holder == 'm': icon = cogIcons.find('**/MoneyIcon') rIconGeom = icon.copyTo(hidden) rIconGeom.setColor(Suit.Suit.medallionColors[holder]) rIconGeomScale = 0.12 cogIcons.removeNode() elif holderType == 'level': cogIcons = loader.loadModel('phase_3/models/gui/cog_icons') rIconGeom = cogIcons.find('**/cog') rIconGeomScale = IMAGE_SCALE_SMALL cogIcons.removeNode() else: rIconGeom = self.createSuitHead(holder) lPos.setX(-0.18) auxText = TTLocalizer.QuestPosterAuxFrom infoText = quest.getLocationName() if infoText == '': infoText = TTLocalizer.QuestPosterAnywhere elif quest.getType() == Quests.VisitQuest: frameBgColor = 'brown' captions[0] = '%s' % toNpcName lIconGeom = self.createNpcToonHead(toNpcId) lIconGeomScale = IMAGE_SCALE_SMALL if not fComplete: infoText = TTLocalizer.QuestPageDestination % (toNpcBuildingName, toNpcStreetName, toNpcLocationName) elif quest.getType() == Quests.TrackChoiceQuest: frameBgColor = 'green' invModel = loader.loadModel('phase_3.5/models/gui/inventory_icons') track1, track2 = quest.getChoices() lIconGeom = invModel.find('**/' + AvPropsNew[track1][1]) if not fComplete: auxText = TTLocalizer.QuestPosterAuxOr lPos.setX(-0.18) rIconGeom = invModel.find('**/' + AvPropsNew[track2][1]) infoText = TTLocalizer.QuestPageNameAndDestination % (toNpcName, toNpcBuildingName, toNpcStreetName, toNpcLocationName) infoZ = -0.02 invModel.removeNode() elif quest.getType() == Quests.BuildingQuest: frameBgColor = 'blue' track = quest.getBuildingTrack() numFloors = quest.getNumFloors() if track == 'c': lIconGeom = loader.loadModel('phase_4/models/modules/suit_landmark_corp') elif track == 'l': lIconGeom = loader.loadModel('phase_4/models/modules/suit_landmark_legal') elif track == 'm': lIconGeom = loader.loadModel('phase_4/models/modules/suit_landmark_money') elif track == 's': lIconGeom = loader.loadModel('phase_4/models/modules/suit_landmark_sales') else: bookModel = loader.loadModel('phase_3.5/models/gui/stickerbook_gui') lIconGeom = bookModel.find('**/COG_building') bookModel.removeNode() if lIconGeom and track != Quests.Any: self.loadElevator(lIconGeom, numFloors) lIconGeom.setH(180) self.fitGeometry(lIconGeom, fFlip=0) lIconGeomScale = IMAGE_SCALE_SMALL else: lIconGeomScale = 0.13 if not fComplete: infoText = quest.getLocationName() if infoText == '': infoText = TTLocalizer.QuestPosterAnywhere # cogdo quest elif quest.getType() == Quests.CogdoQuest: frameBgColor = 'lightGreen' track = quest.getBuildingTrack() if track == 'c': lIconGeom = loader.loadModel('phase_4/models/modules/suit_landmark_corp') elif track == 'l': lIconGeom = loader.loadModel('phase_4/models/modules/suit_landmark_legal') elif track == 'm': lIconGeom = loader.loadModel('phase_4/models/modules/suit_landmark_money') elif track == 's': lIconGeom = loader.loadModel('phase_4/models/modules/suit_landmark_sales') else: lIconGeom = loader.loadModel('phase_5/models/cogdominium/tt_m_ara_cbe_fieldOfficeMoverShaker') if lIconGeom and track != Quests.Any: lIconGeom.setH(180) else: lIconGeom.setH(180) self.fitGeometry(lIconGeom) lIconGeomScale = IMAGE_SCALE_SMALL if not fComplete: infoText = quest.getLocationName() if infoText == '': infoText = TTLocalizer.QuestPosterAnywhere elif quest.getType() == Quests.FactoryQuest: frameBgColor = 'blue' bookModel = loader.loadModel('phase_3.5/models/gui/stickerbook_gui') lIconGeom = bookModel.find('**/factoryIcon2') bookModel.removeNode() lIconGeomScale = 0.13 if not fComplete: infoText = quest.getLocationName() if infoText == '': infoText = TTLocalizer.QuestPosterAnywhere elif quest.getType() == Quests.MintQuest: frameBgColor = 'blue' bookModel = loader.loadModel('phase_3.5/models/gui/stickerbook_gui') lIconGeom = bookModel.find('**/CashBotMint') bookModel.removeNode() lIconGeomScale = 0.13 if not fComplete: infoText = quest.getLocationName() if infoText == '': infoText = TTLocalizer.QuestPosterAnywhere elif quest.getType() == Quests.ForemanQuest or quest.getType() == Quests.SupervisorQuest: frameBgColor = 'blue' bookModel = loader.loadModel('phase_3.5/models/gui/stickerbook_gui') lIconGeom = bookModel.find('**/skelecog5') bookModel.removeNode() lIconGeomScale = 0.13 if not fComplete: infoText = quest.getLocationName() if infoText == '': infoText = TTLocalizer.QuestPosterAnywhere elif quest.getType() == Quests.BossQuest: frameBgColor = 'blue' cogIcons = loader.loadModel('phase_3/models/gui/cog_icons') lIconGeom = cogIcons.find('**/cog') lIconGeomScale = IMAGE_SCALE_SMALL cogIcons.removeNode() if not fComplete: infoText = quest.getLocationName() if infoText == '': infoText = TTLocalizer.QuestPosterAnywhere elif quest.getType() == Quests.VPQuest: frameBgColor = 'blue' lIconGeom = loader.loadModel('phase_9/models/char/sellbotBoss-head-zero') lIconGeomPos = [0, 0, -0.055] lIconGeomHpr = [-90, 0, -90] lIconGeomScale = 0.015 if not fComplete: infoText = quest.getLocationName() if infoText == '': infoText = TTLocalizer.QuestPosterAnywhere elif quest.getType() == Quests.CFOQuest: frameBgColor = 'blue' lIconGeom = loader.loadModel('phase_10/models/char/cashbotBoss-head-zero') lIconGeomPos = [0, 0, -0.055] lIconGeomHpr = [90, 0, -90] lIconGeomScale = 0.015 if not fComplete: infoText = quest.getLocationName() if infoText == '': infoText = TTLocalizer.QuestPosterAnywhere elif quest.getType() == Quests.CJQuest: frameBgColor = 'blue' lIconGeom = loader.loadModel('phase_11/models/char/lawbotBoss-head-zero') lIconGeomPos = [0, 0, -0.055] lIconGeomHpr = [90, 0, -90] lIconGeomScale = 0.025 if not fComplete: infoText = quest.getLocationName() if infoText == '': infoText = TTLocalizer.QuestPosterAnywhere elif quest.getType() == Quests.CEOQuest: frameBgColor = 'blue' lIconGeom = loader.loadModel('phase_12/models/char/bossbotBoss-head-zero') lIconGeomPos = [0, 0, -0.065] lIconGeomHpr = [90, 0, -90] lIconGeomScale = 0.0125 if not fComplete: infoText = quest.getLocationName() if infoText == '': infoText = TTLocalizer.QuestPosterAnywhere elif 0:#quest.getType() == Quests.FriendQuest: frameBgColor = 'brown' gui = loader.loadModel('phase_3.5/models/gui/friendslist_gui') lIconGeom = gui.find('**/FriendsBox_Closed') lIconGeomScale = 0.45 gui.removeNode() infoText = TTLocalizer.QuestPosterAnywhere elif quest.getType() == Quests.TrolleyQuest: frameBgColor = 'lightBlue' gui = loader.loadModel('phase_3.5/models/gui/stickerbook_gui') lIconGeom = gui.find('**/trolley') lIconGeomScale = 0.13 gui.removeNode() infoText = TTLocalizer.QuestPosterPlayground elif quest.getType() == Quests.MailboxQuest: frameBgColor = 'lightBlue' bookModel = loader.loadModel('phase_3.5/models/gui/stickerbook_gui') lIconGeom = bookModel.find('**/package') lIconGeomScale = 0.12 bookModel.removeNode() infoText = TTLocalizer.QuestPosterAtHome elif quest.getType() == Quests.PhoneQuest: frameBgColor = 'lightBlue' bookModel = loader.loadModel('phase_3.5/models/gui/stickerbook_gui') lIconGeom = bookModel.find('**/clarabelleCow') lIconGeomScale = 0.12 bookModel.removeNode() infoText = TTLocalizer.QuestPosterOnPhone else: frameBgColor = 'blue' if quest.getType() == Quests.CogTrackQuest: dept = quest.getCogTrack() cogIcons = loader.loadModel('phase_3/models/gui/cog_icons') lIconGeomScale = 0.13 if dept == 'c': icon = cogIcons.find('**/CorpIcon') elif dept == 's': icon = cogIcons.find('**/SalesIcon') elif dept == 'l': icon = cogIcons.find('**/LegalIcon') elif dept == 'm': icon = cogIcons.find('**/MoneyIcon') lIconGeom = icon.copyTo(hidden) lIconGeom.setColor(Suit.Suit.medallionColors[dept]) cogIcons.removeNode() elif quest.getType() == Quests.CogQuest: if quest.getCogType() != Quests.Any: lIconGeom = self.createSuitHead(quest.getCogType()) lIconGeomScale = IMAGE_SCALE_SMALL else: cogIcons = loader.loadModel('phase_3/models/gui/cog_icons') lIconGeom = cogIcons.find('**/cog') lIconGeomScale = IMAGE_SCALE_SMALL cogIcons.removeNode() elif quest.getType() == Quests.CogLevelQuest: cogIcons = loader.loadModel('phase_3/models/gui/cog_icons') lIconGeom = cogIcons.find('**/cog') lIconGeomScale = IMAGE_SCALE_SMALL cogIcons.removeNode() elif quest.getType() == Quests.SkelecogTrackQuest: dept = quest.getCogTrack() cogIcons = loader.loadModel('phase_3/models/gui/cog_icons') lIconGeomScale = 0.13 if dept == 'c': icon = cogIcons.find('**/CorpIcon') elif dept == 's': icon = cogIcons.find('**/SalesIcon') elif dept == 'l': icon = cogIcons.find('**/LegalIcon') elif dept == 'm': icon = cogIcons.find('**/MoneyIcon') lIconGeom = icon.copyTo(hidden) lIconGeom.setColor(Suit.Suit.medallionColors[dept]) cogIcons.removeNode() elif quest.getType() == Quests.SkelecogQuest: cogIcons = loader.loadModel('phase_3.5/models/gui/stickerbook_gui') lIconGeom = cogIcons.find('**/skelecog5') lIconGeomScale = IMAGE_SCALE_SMALL cogIcons.removeNode() elif quest.getType() == Quests.SkelecogLevelQuest: cogIcons = loader.loadModel('phase_3.5/models/gui/stickerbook_gui') lIconGeom = cogIcons.find('**/skelecog5') lIconGeomScale = IMAGE_SCALE_SMALL cogIcons.removeNode() elif quest.getType() == Quests.SkeleReviveQuest: cogIcons = loader.loadModel('phase_3.5/models/gui/stickerbook_gui') lIconGeom = cogIcons.find('**/skelecog5') lIconGeomScale = IMAGE_SCALE_SMALL cogIcons.removeNode() if not fComplete: infoText = quest.getLocationName() if infoText == '': infoText = TTLocalizer.QuestPosterAnywhere if fComplete: textColor = (0, 0.3, 0, 1) imageColor = Vec4(*self.colors['lightGreen']) lPos.setX(-0.18) rIconGeom = self.createNpcToonHead(toNpcId) rIconGeomScale = IMAGE_SCALE_SMALL captions = captions[:1] captions.append(toNpcName) auxText = TTLocalizer.QuestPosterAuxReturnTo headlineString = TTLocalizer.QuestPosterComplete infoText = TTLocalizer.QuestPageDestination % (toNpcBuildingName, toNpcStreetName, toNpcLocationName) if self.laffMeter != None: self.laffMeter.reparentTo(hidden) self.laffMeter.destroy() self.laffMeter = None else: textColor = self.normalTextColor self.show() self['image_color'] = imageColor self.headline['text_fg'] = textColor self.headline['text'] = headlineString self.lPictureFrame.show() self.lPictureFrame.setPos(lPos) self.lPictureFrame['text_scale'] = TEXT_SCALE if lPos[0] != 0: self.lPictureFrame['text_scale'] = 0.0325 self.lPictureFrame['text'] = captions[0] self.lPictureFrame['image_color'] = Vec4(*self.colors[frameBgColor]) if len(captions) > 1: self.rPictureFrame.show() self.rPictureFrame['text'] = captions[1] self.rPictureFrame['text_scale'] = 0.0325 self.rPictureFrame['image_color'] = Vec4(*self.colors[frameBgColor]) else: self.rPictureFrame.hide() self._deleteGeoms() self.lQuestIcon['geom'] = lIconGeom self.lQuestIcon['geom_pos'] = (0, 10, 0) if lIconGeom: try: self.lQuestIcon['geom_scale'] = lIconGeomScale except: pass try: self.lQuestIcon['geom_pos'] = Point3(lIconGeomPos[0], lIconGeomPos[1], lIconGeomPos[2]) except: pass try: self.lQuestIcon['geom_hpr'] = Point3(lIconGeomHpr[0], lIconGeomHpr[1], lIconGeomHpr[2]) except: pass if self.laffMeter != None: self.laffMeter.reparentTo(self.lQuestIcon) self.rQuestIcon['geom'] = rIconGeom self.rQuestIcon['geom_pos'] = (0, 10, 0) if rIconGeom: self.rQuestIcon['geom_scale'] = rIconGeomScale if auxText: self.auxText.show() self.auxText['text'] = auxText self.auxText.setPos(auxTextPos) else: self.auxText.hide() self.bind(DGG.WITHIN, self.mouseEnterPoster) self.bind(DGG.WITHOUT, self.mouseExitPoster) numQuestItems = quest.getNumQuestItems() if fComplete or numQuestItems <= 1: self.questProgress.hide() if not quest.getType() == Quests.TrackChoiceQuest: infoZ = -0.075 else: self.questProgress.show() self.questProgress['value'] = toonProgress & pow(2, 16) - 1 self.questProgress['range'] = numQuestItems self.questProgress['text'] = quest.getProgressString(base.localAvatar, questDesc) self.questInfo['text'] = infoText self.questInfo.setZ(infoZ) self.fitLabel(self.questInfo) return