def createFishingPonds(self): # Note: A list of fishing ponds is now maintanied for easier access # when generating Pond Bingo Managers for Bingo Night. # (JJT - 07/22/04) self.fishingPonds = [] fishingPondGroups = [] for zone in self.air.zoneTable[self.canonicalHoodId]: zoneId = ZoneUtil.getTrueZoneId(zone[0], self.zoneId) dnaData = self.air.dnaDataMap.get(zone[0], None) if isinstance(dnaData, DNAData): area = ZoneUtil.getCanonicalZoneId(zoneId) foundFishingPonds, foundFishingPondGroups = self.air.findFishingPonds( dnaData, zoneId, area) self.fishingPonds += foundFishingPonds fishingPondGroups += foundFishingPondGroups for distObj in self.fishingPonds: self.addDistObj(distObj) # Every pond gets a fisherman npcs = NPCToons.createNpcsInZone(self.air, distObj.zoneId) # TODO-parties : Ask for clarification on this. # Since this creates all the NPCs in the zone, this creates the # party people for the party hat as well... but what if there are # no fishing ponds?? for npc in npcs: self.addDistObj(npc) # Now look in the fishing pond DNAGroups for fishing spots fishingSpots = [] for dnaGroup, distPond in zip(fishingPondGroups, self.fishingPonds): fishingSpots += self.air.findFishingSpots(dnaGroup, distPond) for distObj in fishingSpots: self.addDistObj(distObj)
def kickToPlayground(self, retCode): if retCode == 0: msg = TTLocalizer.EstateOwnerLeftMessage % HouseGlobals.BOOT_GRACE_PERIOD self.__popupKickoutMessage(msg) elif retCode == 1: zoneId = base.localAvatar.lastHood self.doneStatus = {'loader': ZoneUtil.getBranchLoaderName(zoneId), 'where': ZoneUtil.getToonWhereName(zoneId), 'how': 'teleportIn', 'hoodId': zoneId, 'zoneId': zoneId, 'shardId': None, 'avId': -1} messenger.send(self.doneEvent) elif retCode == 2: zoneId = base.localAvatar.lastHood self.doneStatus = {'loader': ZoneUtil.getBranchLoaderName(zoneId), 'where': ZoneUtil.getToonWhereName(zoneId), 'how': 'teleportIn', 'hoodId': zoneId, 'zoneId': zoneId, 'shardId': None, 'avId': -1} messenger.send(self.doneEvent) else: self.notify.error('unknown reason for exiting estate') return
def handleWaitForSetZoneResponse(self, requestStatus): loaderName = requestStatus['loader'] if loaderName == 'safeZoneLoader': if not loader.inBulkBlock: loader.beginBulkLoad( 'hood', TTLocalizer.HeadingToPlayground, safeZoneCountMap[ self.id], 1, TTLocalizer.TIP_GENERAL, self.id) self.loadLoader(requestStatus) loader.endBulkLoad('hood') elif loaderName == 'townLoader': if not loader.inBulkBlock: zoneId = requestStatus['zoneId'] toPhrase = StreetNames[ZoneUtil.getCanonicalBranchZone(zoneId)][ 0] streetName = StreetNames[ ZoneUtil.getCanonicalBranchZone(zoneId)][-1] loader.beginBulkLoad( 'hood', TTLocalizer.HeadingToStreet % { 'to': toPhrase, 'street': streetName}, townCountMap[ self.id], 1, TTLocalizer.TIP_STREET, zoneId) self.loadLoader(requestStatus) loader.endBulkLoad('hood') elif loaderName == 'minigame': pass elif loaderName == 'cogHQLoader': print 'should be loading HQ'
def enterWaitForZoneRedirect(self): self.notify.debug('enterWaitForZoneRedirect(requestStatus=' + str(self._requestStatus) + ')') if not self.Disable: base.cr.handler = self.handleWaitForZoneRedirect base.cr.handlerArgs = self._requestStatus base.cr.setInQuietZone(True) self.waitForDatabase('WaitForZoneRedirect') zoneId = self._requestStatus['zoneId'] avId = self._requestStatus.get('avId', -1) allowRedirect = self._requestStatus.get('allowRedirect', 1) if avId != -1: allowRedirect = 0 if not base.cr.welcomeValleyManager: newZoneId = ZoneUtil.getCanonicalZoneId(zoneId) if newZoneId != zoneId: self.gotZoneRedirect(newZoneId) return if allowRedirect and ZoneUtil.isWelcomeValley(zoneId): self.notify.info('Requesting AI redirect from zone %s.' % zoneId) if base.slowQuietZone: def rZI(task, zoneId = zoneId, self = self): base.cr.welcomeValleyManager.requestZoneId(zoneId, self.gotZoneRedirect) return Task.done taskMgr.doMethodLater(base.slowQuietZoneDelay, rZI, 'slowQuietZone-welcomeValleyRedirect') else: base.cr.welcomeValleyManager.requestZoneId(zoneId, self.gotZoneRedirect) else: self.fsm.request('waitForSetZoneResponse')
def getRecommendedTunnelClassFromZone(zone): if ZoneUtil.getWhereName(zone) == 'playground': return StreetLinkTunnel if ZoneUtil.getWhereName(zone) == 'street': if ZoneUtil.getHoodId(zone, street=1) == base.cr.playGame.hood.id: return SafeZoneLinkTunnel return NeighborhoodLinkTunnel
def handleWaitForSetZoneResponse(self, requestStatus): loaderName = requestStatus["loader"] if loaderName == "safeZoneLoader": if not loader.inBulkBlock: loader.beginBulkLoad( "hood", TTLocalizer.HeadingToPlayground, safeZoneCountMap[self.id], 1, TTLocalizer.TIP_GENERAL ) self.loadLoader(requestStatus) loader.endBulkLoad("hood") elif loaderName == "townLoader": if not loader.inBulkBlock: zoneId = requestStatus["zoneId"] toPhrase = StreetNames[ZoneUtil.getCanonicalBranchZone(zoneId)][0] streetName = StreetNames[ZoneUtil.getCanonicalBranchZone(zoneId)][-1] loader.beginBulkLoad( "hood", TTLocalizer.HeadingToStreet % {"to": toPhrase, "street": streetName}, townCountMap[self.id], 1, TTLocalizer.TIP_STREET, ) self.loadLoader(requestStatus) loader.endBulkLoad("hood") elif loaderName == "minigame": pass elif loaderName == "cogHQLoader": print "should be loading HQ"
def handleWaitForSetZoneResponse(self, requestStatus): assert ( self.notify.debug("handleWaitForSetZoneResponse(requestStatus=" + str(requestStatus) + ")")) loaderName = requestStatus["loader"] if loaderName == "safeZoneLoader": if not loader.inBulkBlock: loader.beginBulkLoad("hood", TTLocalizer.HeadingToPlayground, safeZoneCountMap[self.id], 1, TTLocalizer.TIP_GENERAL) self.loadLoader(requestStatus) loader.endBulkLoad("hood") #elif loaderName=="suitInterior": # TODO: loading bar # self.loadLoader(requestStatus) elif loaderName == "townLoader": if not loader.inBulkBlock: zoneId = requestStatus["zoneId"] toPhrase = StreetNames[ZoneUtil.getCanonicalBranchZone( zoneId)][0] streetName = StreetNames[ZoneUtil.getCanonicalBranchZone( zoneId)][-1] loader.beginBulkLoad("hood", (TTLocalizer.HeadingToStreet % { 'to': toPhrase, 'street': streetName }), townCountMap[self.id], 1, TTLocalizer.TIP_STREET) self.loadLoader(requestStatus) loader.endBulkLoad("hood") elif loaderName == "minigame": pass elif loaderName == "cogHQLoader": print "should be loading HQ" else: assert (self.notify.debug(" unknown loaderName=" + loaderName))
def load(self, zoneId): StateData.load(self) self.zoneId = zoneId self.branchZone = ZoneUtil.getBranchZone(zoneId) self.canonicalBranchZone = ZoneUtil.getCanonicalBranchZone(zoneId) self.music = base.loadMusic(self.musicFile) self.interiorMusic = base.loadMusic(self.interiorMusicFile)
def enterClosing(self, ts): doorFrameHoleRight = self.findDoorNode('doorFrameHoleRight') if doorFrameHoleRight.isEmpty(): self.notify.warning('enterClosing(): did not find doorFrameHoleRight') return None rightDoor = self.findDoorNode('rightDoor') if rightDoor.isEmpty(): self.notify.warning('enterClosing(): did not find rightDoor') return None otherNP = self.getDoorNodePath() trackName = 'doorClose-%d' % self.doId self.doorTrack = Sequence(LerpHprInterval(node = rightDoor, duration = 1.0, hpr = VBase3(0, 0, 0), startHpr = VBase3(100, 0, 0), other = otherNP, blendType = 'easeInOut'), Func(doorFrameHoleRight.hide), Func(rightDoor.hide), SoundInterval(self.closeSfx, node = rightDoor), name = trackName) self.doorTrack.start(ts) if hasattr(self, 'done'): zoneId = self.otherZoneId request = { 'loader': ZoneUtil.getBranchLoaderName(zoneId), 'where': ZoneUtil.getToonWhereName(zoneId), 'how': 'doorIn', 'hoodId': ZoneUtil.getHoodId(zoneId), 'zoneId': zoneId, 'shardId': None, 'avId': -1, 'doorDoId': self.otherDoId } messenger.send('doorDoneEvent', [ request])
def requestTeleport(self, hoodId, zoneId, shardId, avId): if avId > 0: teleportNotify.debug('requestTeleport%s' % ((hoodId, zoneId, shardId, avId), )) if localAvatar.hasActiveBoardingGroup(): if avId > 0: teleportNotify.debug( 'requestTeleport: has active boarding group') rejectText = TTLocalizer.BoardingCannotLeaveZone localAvatar.elevatorNotifier.showMe(rejectText) return loaderId = ZoneUtil.getBranchLoaderName(zoneId) whereId = ZoneUtil.getToonWhereName(zoneId) if hoodId == ToontownGlobals.MyEstate: loaderId = 'safeZoneLoader' whereId = 'estate' if hoodId == ToontownGlobals.PartyHood: loaderId = 'safeZoneLoader' whereId = 'party' self.requestLeave({ 'loader': loaderId, 'where': whereId, 'how': 'teleportIn', 'hoodId': hoodId, 'zoneId': zoneId, 'shardId': shardId, 'avId': avId })
def getLocationName(self, zoneId, appendWelcomeValley=True): isWelcomeValley = False if ZoneUtil.isWelcomeValley(zoneId): isWelcomeValley = True zoneId = ZoneUtil.getTrueZoneId( zoneId, ToontownGlobals.Zones.ToontownCentral) lookupTable = ToontownGlobals.hoodNameMap isStreet = (zoneId % 1000) != 0 if isStreet: lookupTable = TTLocalizer.GlobalStreetNames name = lookupTable.get(zoneId, '') if isStreet: locationName = '{0}, {1}'.format( self.getLocationName(self.zoneId, False), name[2]) if isWelcomeValley and appendWelcomeValley: locationName = locationName + ' (' + TTLocalizer.WelcomeValley[ 2] + ')' return locationName locationName = name[2] if isWelcomeValley and appendWelcomeValley: locationName = locationName + ' (' + TTLocalizer.WelcomeValley[ 2] + ')' return locationName
def requestTeleport(self, hoodId, zoneId, shardId, avId): if avId > 0: teleportNotify.debug("requestTeleport%s" % ((hoodId, zoneId, shardId, avId),)) if localAvatar.hasActiveBoardingGroup(): if avId > 0: teleportNotify.debug("requestTeleport: has active boarding group") rejectText = TTLocalizer.BoardingCannotLeaveZone localAvatar.elevatorNotifier.showMe(rejectText) return loaderId = ZoneUtil.getBranchLoaderName(zoneId) whereId = ZoneUtil.getToonWhereName(zoneId) if hoodId == ToontownGlobals.MyEstate: loaderId = "safeZoneLoader" whereId = "estate" if hoodId == ToontownGlobals.PartyHood: loaderId = "safeZoneLoader" whereId = "party" self.requestLeave( { "loader": loaderId, "where": whereId, "how": "teleportIn", "hoodId": hoodId, "zoneId": zoneId, "shardId": shardId, "avId": avId, } )
def enterWaitForZoneRedirect(self): self.notify.debug('enterWaitForZoneRedirect(requestStatus=' + str(self._requestStatus) + ')') if not self.Disable: base.cr.handler = self.handleWaitForZoneRedirect base.cr.handlerArgs = self._requestStatus base.cr.setInQuietZone(True) self.waitForDatabase('WaitForZoneRedirect') zoneId = self._requestStatus['zoneId'] avId = self._requestStatus.get('avId', -1) allowRedirect = self._requestStatus.get('allowRedirect', 1) if avId != -1: allowRedirect = 0 if not base.cr.welcomeValleyManager: newZoneId = ZoneUtil.getCanonicalZoneId(zoneId) if newZoneId != zoneId: self.gotZoneRedirect(newZoneId) return if allowRedirect and ZoneUtil.isWelcomeValley(zoneId): self.notify.info('Requesting AI redirect from zone %s.' % zoneId) if base.slowQuietZone: def rZI(task, zoneId=zoneId, self=self): base.cr.welcomeValleyManager.requestZoneId( zoneId, self.gotZoneRedirect) return Task.done taskMgr.doMethodLater(base.slowQuietZoneDelay, rZI, 'slowQuietZone-welcomeValleyRedirect') else: base.cr.welcomeValleyManager.requestZoneId( zoneId, self.gotZoneRedirect) else: self.fsm.request('waitForSetZoneResponse')
def createFishingPonds(self): self.fishingPonds = [] fishingPondGroups = [] for zone in self.air.zoneTable[self.canonicalHoodId]: zoneId = ZoneUtil.getTrueZoneId(zone[0], self.zoneId) dnaData = self.air.dnaDataMap.get(zone[0], None) if isinstance(dnaData, DNAData): area = ZoneUtil.getCanonicalZoneId(zoneId) foundFishingPonds, foundFishingPondGroups = self.air.findFishingPonds(dnaData, zoneId, area) self.fishingPonds += foundFishingPonds fishingPondGroups += foundFishingPondGroups for distObj in self.fishingPonds: self.addDistObj(distObj) npcs = NPCToons.createNpcsInZone(self.air, distObj.zoneId) for npc in npcs: self.addDistObj(npc) fishingSpots = [] for dnaGroup, distPond in zip(fishingPondGroups, self.fishingPonds): fishingSpots += self.air.findFishingSpots(dnaGroup, distPond) for distObj in fishingSpots: self.addDistObj(distObj) return
def requestTeleport(self, hoodId, zoneId, shardId, avId): if avId > 0: teleportNotify.debug('requestTeleport%s' % ((hoodId, zoneId, shardId, avId),)) if localAvatar.hasActiveBoardingGroup(): if avId > 0: teleportNotify.debug('requestTeleport: has active boarding group') rejectText = TTLocalizer.BoardingCannotLeaveZone localAvatar.elevatorNotifier.showMe(rejectText) return loaderId = ZoneUtil.getBranchLoaderName(zoneId) whereId = ZoneUtil.getToonWhereName(zoneId) if hoodId == ToontownGlobals.MyEstate: loaderId = 'safeZoneLoader' whereId = 'estate' if hoodId == ToontownGlobals.PartyHood: loaderId = 'safeZoneLoader' whereId = 'party' self.requestLeave({'loader': loaderId, 'where': whereId, 'how': 'teleportIn', 'hoodId': hoodId, 'zoneId': zoneId, 'shardId': shardId, 'avId': avId})
def handleWaitForSetZoneResponse(self, requestStatus): loaderName = requestStatus['loader'] if loaderName == 'safeZoneLoader': if not loader.inBulkBlock: loader.beginBulkLoad('hood', TTLocalizer.HeadingToPlayground, safeZoneCountMap[self.id], 1, TTLocalizer.TIP_GENERAL, self.id) self.loadLoader(requestStatus) loader.endBulkLoad('hood') elif loaderName == 'townLoader': if not loader.inBulkBlock: zoneId = requestStatus['zoneId'] toPhrase = StreetNames[ZoneUtil.getCanonicalBranchZone( zoneId)][0] streetName = StreetNames[ZoneUtil.getCanonicalBranchZone( zoneId)][-1] loader.beginBulkLoad( 'hood', TTLocalizer.HeadingToStreet % { 'to': toPhrase, 'street': streetName }, townCountMap[self.id], 1, TTLocalizer.TIP_STREET, zoneId) self.loadLoader(requestStatus) loader.endBulkLoad('hood') elif loaderName == 'minigame': pass elif loaderName == 'cogHQLoader': print 'should be loading HQ'
def enterTutorial(self, branchZone, streetZone, shopZone, hqZone): toonbase.localToon.inTutorial = 1 ZoneUtil.overrideOn(branch=branchZone, exteriorList=[streetZone], interiorList=[shopZone, hqZone]) messenger.send('startTutorial', [shopZone]) self.acceptOnce('stopTutorial', self.__handleStopTutorial) self.acceptOnce('toonArrivedTutorial', self.d_toonArrived)
def getRecommendedTunnelClassFromZone(zone): if ZoneUtil.getWhereName(zone) == 'playground': return StreetLinkTunnel if ZoneUtil.getWhereName(zone) == 'street': if ZoneUtil.getHoodId(zone) == base.cr.playGame.hood.id: return SafeZoneLinkTunnel else: return NeighborhoodLinkTunnel
def startup(self): self.createTreasurePlanner() self.notify.info('Creating objects in hood %s..' % self.hood) interiorZoneAllocator = UniqueIdAllocator(self.zoneId + 400, self.zoneId + 999) for dnaFile in self.dnaFiles: zoneId = 0 if 'sz' in dnaFile: zoneId = self.zoneId else: for segment in dnaFile.split('_'): if segment.endswith('dna'): segment = segment[:4] if segment.isdigit(): zoneId = int(segment) break dnaStore = DNAStorage() dnaData = loadDNAFileAI(dnaStore, dnaFile) self.air.dnaStoreMap[zoneId] = dnaStore self.air.dnaDataMap[zoneId] = dnaData for block in dnaStore.blockZones.keys(): exteriorZone = dnaStore.blockZones[block] interiorZone = ZoneUtil.getBranchZone(zoneId) - ZoneUtil.getBranchZone(zoneId) % 100 + 500 + block if dnaStore.blockBuildingTypes.get(block, None) == None: interior = DistributedToonInteriorAI.DistributedToonInteriorAI(self.air, block, exteriorZone) interior.generateWithRequired(interiorZone) door = DistributedDoorAI.DistributedDoorAI(self.air, block, interiorZone, 1) door.generateWithRequired(exteriorZone) self.exteriorDoors.append(door) self.interiors.append(interior) elif dnaStore.blockBuildingTypes.get(block) == 'cinema': cinemaIndex = CinemaGlobals.Zone2Block2CinemaIndex[zoneId][block] interior = DistributedCinemaInteriorAI.DistributedCinemaInteriorAI(self.air, block, exteriorZone, cinemaIndex) interior.generateWithRequired(interiorZone) door = DistributedDoorAI.DistributedDoorAI(self.air, block, interiorZone, 1) door.generateWithRequired(exteriorZone) self.exteriorDoors.append(door) self.interiors.append(interior) elif dnaStore.blockBuildingTypes.get(block) == 'hq': interior = DistributedToonHQInteriorAI.DistributedToonHQInteriorAI(self.air, block, exteriorZone) interior.generateWithRequired(interiorZone) door0 = DistributedDoorAI.DistributedDoorAI(self.air, block, interiorZone, 3) door0.generateWithRequired(exteriorZone) door1 = DistributedDoorAI.DistributedDoorAI(self.air, block, interiorZone, 3, 1) door1.generateWithRequired(exteriorZone) self.exteriorDoors.append(door0) self.exteriorDoors.append(door1) self.interiors.append(interior) elif dnaStore.blockBuildingTypes.get(block) == 'clotheshop': interior = DistributedTailorInteriorAI.DistributedTailorInteriorAI(self.air, block, exteriorZone) interior.generateWithRequired(interiorZone) door = DistributedDoorAI.DistributedDoorAI(self.air, block, interiorZone, 1) door.generateWithRequired(exteriorZone) self.exteriorDoors.append(door) self.interiors.append(interior) del self.dnaFiles return
def getHoodText(self, zoneId): if ZoneUtil.getWhereName(zoneId) == 'street' and zoneId < 61000: hoodText = CIGlobals.BranchZone2StreetName[ZoneUtil.getBranchZone(zoneId)] hoodText += '\n' + self.id else: hoodText = self.id if self.id != CIGlobals.MinigameArea: hoodText += '\n' + ZoneUtil.getWhereName(zoneId).upper() return hoodText
def genDNAFileName(zoneId): zoneId = ZoneUtil.getCanonicalZoneId(zoneId) hoodId = ZoneUtil.getCanonicalHoodId(zoneId) hood = ToontownGlobals.dnaMap[hoodId] phase = ToontownGlobals.streetPhaseMap[hoodId] if hoodId == zoneId: zoneId = 'sz' return 'phase_%s/dna/%s_%s.pdna' % (phase, hood, zoneId)
def createStartingBlocks(self): self.racingPads = [] self.viewingPads = [] self.viewingBlocks = [] self.startingBlocks = [] self.foundRacingPadGroups = [] self.foundViewingPadGroups = [] self.golfKartPads = [] self.golfKartPadGroups = [] for zone in self.air.zoneTable[self.canonicalHoodId]: zoneId = ZoneUtil.getTrueZoneId(zone[0], self.zoneId) dnaData = self.air.dnaDataMap.get(zone[0], None) if isinstance(dnaData, DNAData): area = ZoneUtil.getCanonicalZoneId(zoneId) (foundRacingPads, foundRacingPadGroups) = self.air.findRacingPads( dnaData, zoneId, area, overrideDNAZone=True) (foundViewingPads, foundViewingPadGroups) = self.air.findRacingPads( dnaData, zoneId, area, type='viewing_pad', overrideDNAZone=True) self.racingPads += foundRacingPads self.foundRacingPadGroups += foundRacingPadGroups self.viewingPads += foundViewingPads self.foundViewingPadGroups += foundViewingPadGroups continue self.startingBlocks = [] for (dnaGroup, distRacePad) in zip(self.foundRacingPadGroups, self.racingPads): startingBlocks = self.air.findStartingBlocks(dnaGroup, distRacePad) self.startingBlocks += startingBlocks for startingBlock in startingBlocks: distRacePad.addStartingBlock(startingBlock) for distObj in self.startingBlocks: self.addDistObj(distObj) for (dnaGroup, distViewPad) in zip(self.foundViewingPadGroups, self.viewingPads): startingBlocks = self.air.findStartingBlocks(dnaGroup, distViewPad) for viewingBlock in self.viewingBlocks: distViewPad.addStartingBlock(viewingBlocks) for distObj in self.viewingBlocks: self.addDistObj(distObj) for viewPad in self.viewingPads: self.addDistObj(viewPad) for racePad in self.racingPads: racePad.request('WaitEmpty') self.addDistObj(racePad)
def getHoodText(self, zoneId): if ZoneUtil.getWhereName(zoneId) == 'street' and zoneId < 61000: hoodText = CIGlobals.BranchZone2StreetName[ZoneUtil.getBranchZone( zoneId)] hoodText += '\n' + self.id else: hoodText = self.id if self.id != CIGlobals.MinigameArea: hoodText += '\n' + ZoneUtil.getWhereName(zoneId).upper() return hoodText
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(): continue 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 forcedExit(self, avId): target_sz = toonbase.localToon.defaultZone toonbase.tcr.playGame.getPlace().fsm.request('teleportOut', [ { 'loader': ZoneUtil.getLoaderName(target_sz), 'where': ZoneUtil.getWhereName(target_sz, 1), 'how': 'teleportIn', 'hoodId': target_sz, 'zoneId': target_sz, 'shardId': None, 'avId': -1 }])
def handleBookCloseTeleport(self, hoodId, zoneId): if hasattr(self, 'fsm'): self.fsm.request('DFA', [ { 'loader': ZoneUtil.getBranchLoaderName(zoneId), 'where': ZoneUtil.getToonWhereName(zoneId), 'how': 'teleportIn', 'hoodId': hoodId, 'zoneId': zoneId, 'shardId': None, 'avId': -1 }])
def handleBookCloseTeleport(self, hoodId, zoneId): if hasattr(self, 'fsm'): self.fsm.request( 'DFA', [{ 'loader': ZoneUtil.getBranchLoaderName(zoneId), 'where': ZoneUtil.getToonWhereName(zoneId), 'how': 'teleportIn', 'hoodId': hoodId, 'zoneId': zoneId, 'shardId': None, 'avId': -1 }])
def addLinkTunnelHooks(self, hoodPart, nodeList): tunnelOriginList = [] for i in nodeList: linkTunnelNPC = i.findAllMatches('**/linktunnel*') for p in range(linkTunnelNPC.getNumPaths()): linkTunnel = linkTunnelNPC.getPath(p) name = linkTunnel.getName() hoodStr = name[11:13] zoneStr = name[14:18] hoodId = self.getIdFromName(hoodStr) zoneId = int(zoneStr) linkSphere = linkTunnel.find('**/tunnel_trigger') if not linkSphere.isEmpty(): linkSphere.node().setName('tunnel_trigger_' + hoodStr + '_' + zoneStr) else: linkSphere = linkTunnel.find('**/tunnel_trigger_' + hoodStr + '_' + zoneStr) if linkSphere.isEmpty(): self.notify.error('tunnel_trigger not found') tunnelOrigin = linkTunnel.find('**/tunnel_origin') if tunnelOrigin.isEmpty(): self.notify.error('tunnel_origin not found') tunnelOriginPlaceHolder = render.attachNewNode('toph_' + hoodStr + '_' + zoneStr) tunnelOriginList.append(tunnelOriginPlaceHolder) tunnelOriginPlaceHolder.setPos(tunnelOrigin.getPos(render)) tunnelOriginPlaceHolder.setHpr(tunnelOrigin.getHpr(render)) hood = toonbase.localToon.cr.playGame.hood if ZoneUtil.tutorialDict: how = 'teleportIn' tutorialFlag = 1 else: how = 'tunnelIn' tutorialFlag = 0 hoodPart.accept('enter' + linkSphere.getName(), hoodPart.handleEnterTunnel, [{ 'loader': ZoneUtil.getLoaderName(zoneId), 'where': ZoneUtil.getToonWhereName(zoneId), 'how': how, 'hoodId': hoodId, 'zoneId': zoneId, 'shardId': None, 'tunnelOrigin': tunnelOriginPlaceHolder, 'tutorial': tutorialFlag }]) return tunnelOriginList
def handleBookCloseTeleport(self, hoodId, zoneId): if localAvatar.hasActiveBoardingGroup(): rejectText = TTLocalizer.BoardingCannotLeaveZone localAvatar.elevatorNotifier.showMe(rejectText) return self.requestLeave({'loader': ZoneUtil.getBranchLoaderName(zoneId), 'where': ZoneUtil.getToonWhereName(zoneId), 'how': 'teleportIn', 'hoodId': hoodId, 'zoneId': zoneId, 'shardId': None, 'avId': -1}) return
def tunnelOutSkip(self, fromZoneId, zoneId): tunnelName = base.cr.hoodMgr.makeLinkTunnelName( self.loader.hood.id, fromZoneId) self.doneStatus = { 'loader': ZoneUtil.getLoaderName(zoneId), 'where': ZoneUtil.getToonWhereName(zoneId), 'how': 'skipTunnelIn', 'hoodId': ZoneUtil.getHoodId(zoneId), 'zoneId': zoneId, 'shardId': None, 'tunnelName': tunnelName } messenger.send(self.doneEvent) return
def createGameTables(self): self.gameTables = [] for zone in self.air.zoneTable[self.canonicalHoodId]: zoneId = ZoneUtil.getTrueZoneId(zone[0], self.zoneId) dnaData = self.air.dnaDataMap.get(zone[0], None) if isinstance(dnaData, DNAData): area = ZoneUtil.getCanonicalZoneId(zoneId) foundTables = self.findAndCreateGameTables( dnaData, zoneId, area, overrideDNAZone=True) self.gameTables += foundTables continue for picnicTable in self.gameTables: self.addDistObj(picnicTable)
def enterReward(self, ts=0): toonbase.localToon.b_setParent(ToontownGlobals.SPHidden) request = { 'loader': ZoneUtil.getBranchLoaderName(self.extZoneId), 'where': ZoneUtil.getToonWhereName(self.extZoneId), 'how': 'elevatorIn', 'hoodId': ZoneUtil.getHoodId(self.extZoneId), 'zoneId': self.extZoneId, 'shardId': None, 'avId': -1, 'bldgDoId': self.distBldgDoId } messenger.send('DSIDoneEvent', [request]) return None
def enterWaitForZoneRedirect(self): self.notify.debug("enterWaitForZoneRedirect(requestStatus=" +str(self._requestStatus)+")") # Setup our handlers: if not self.Disable: base.cr.handler = self.handleWaitForZoneRedirect base.cr.handlerArgs = self._requestStatus base.cr.setInQuietZone(True) self.waitForDatabase('WaitForZoneRedirect') zoneId = self._requestStatus["zoneId"] avId = self._requestStatus.get("avId", -1) allowRedirect = self._requestStatus.get("allowRedirect", 1) if avId != -1: # If we're going to a particular avatar, we can't redirect. allowRedirect = 0 if not base.cr.welcomeValleyManager: # If we don't have a welcomeValleyManager, we must be running # in the dev environment without an AI; always put the # avatar in the canonical zone. newZoneId = ZoneUtil.getCanonicalZoneId(zoneId) if newZoneId != zoneId: self.gotZoneRedirect(newZoneId) return if allowRedirect and ZoneUtil.isWelcomeValley(zoneId): # We're going to a WelcomeValley zone, and redirects are # not forbidden, so give the AI a chance to pick a zoneId # for us. self.notify.info("Requesting AI redirect from zone %s." % (zoneId)) if base.slowQuietZone: def rZI(task, zoneId=zoneId, self=self): base.cr.welcomeValleyManager.requestZoneId( zoneId, self.gotZoneRedirect) return Task.done taskMgr.doMethodLater( base.slowQuietZoneDelay, rZI, 'slowQuietZone-welcomeValleyRedirect') else: base.cr.welcomeValleyManager.requestZoneId( zoneId, self.gotZoneRedirect) else: # No, we're just going directly to the zone we asked to go # to. self.fsm.request("waitForSetZoneResponse")
def createGameTables(self): self.gameTables = [] for zone in self.air.zoneTable[self.canonicalHoodId]: zoneId = ZoneUtil.getTrueZoneId(zone[0], self.zoneId) dnaData = self.air.dnaDataMap.get(zone[0], None) if isinstance(dnaData, DNAData): area = ZoneUtil.getCanonicalZoneId(zoneId) foundTables = self.findAndCreateGameTables(dnaData, zoneId, area, overrideDNAZone=True) self.gameTables += foundTables for picnicTable in self.gameTables: self.addDistObj(picnicTable) return
def createStartingBlocks(self): self.racingPads = [] self.viewingPads = [] self.viewingBlocks = [] self.startingBlocks = [] self.foundRacingPadGroups = [] self.foundViewingPadGroups = [] self.golfKartPads = [] self.golfKartPadGroups = [] for zone in self.air.zoneTable[self.canonicalHoodId]: zoneId = ZoneUtil.getTrueZoneId(zone[0], self.zoneId) dnaData = self.air.dnaDataMap.get(zone[0], None) if isinstance(dnaData, DNAData): area = ZoneUtil.getCanonicalZoneId(zoneId) (foundRacingPads, foundRacingPadGroups) = self.air.findRacingPads(dnaData, zoneId, area, overrideDNAZone = True) (foundViewingPads, foundViewingPadGroups) = self.air.findRacingPads(dnaData, zoneId, area, type = 'viewing_pad', overrideDNAZone = True) self.racingPads += foundRacingPads self.foundRacingPadGroups += foundRacingPadGroups self.viewingPads += foundViewingPads self.foundViewingPadGroups += foundViewingPadGroups continue self.startingBlocks = [] for (dnaGroup, distRacePad) in zip(self.foundRacingPadGroups, self.racingPads): startingBlocks = self.air.findStartingBlocks(dnaGroup, distRacePad) self.startingBlocks += startingBlocks for startingBlock in startingBlocks: distRacePad.addStartingBlock(startingBlock) for distObj in self.startingBlocks: self.addDistObj(distObj) for (dnaGroup, distViewPad) in zip(self.foundViewingPadGroups, self.viewingPads): startingBlocks = self.air.findStartingBlocks(dnaGroup, distViewPad) for viewingBlock in self.viewingBlocks: distViewPad.addStartingBlock(viewingBlocks) for distObj in self.viewingBlocks: self.addDistObj(distObj) for viewPad in self.viewingPads: self.addDistObj(viewPad) for racePad in self.racingPads: racePad.request('WaitEmpty') self.addDistObj(racePad)
def getHoodText(self, zoneId): hoodText = base.cr.hoodMgr.getFullnameFromId(self.id) if self.id != Tutorial: streetName = StreetNames.get(ZoneUtil.getCanonicalBranchZone(zoneId)) if streetName: hoodText = hoodText + '\n' + streetName[-1] return hoodText
def findAndCreateGolfKarts(self, dnaGroup, zoneId, area, overrideDNAZone = 0, type = 'golf_kart'): golfKarts = [] golfKartGroups = [] if isinstance(dnaGroup, DNAGroup) and string.find(dnaGroup.getName(), type) >= 0: golfKartGroups.append(dnaGroup) if type == 'golf_kart': nameInfo = dnaGroup.getName().split('_') golfCourse = int(nameInfo[2]) pos = Point3(0, 0, 0) hpr = Point3(0, 0, 0) for i in range(dnaGroup.getNumChildren()): childDnaGroup = dnaGroup.at(i) if string.find(childDnaGroup.getName(), 'starting_block') >= 0: padLocation = dnaGroup.getName().split('_')[2] pos = childDnaGroup.getPos() hpr = childDnaGroup.getHpr() break continue pos += Point3(0, 0, 0.050000000000000003) golfKart = DistributedGolfKartAI.DistributedGolfKartAI(self.air, golfCourse, pos[0], pos[1], pos[2], hpr[0], hpr[1], hpr[2]) else: self.notify.warning('unhandled case') golfKart.generateWithRequired(zoneId) golfKarts.append(golfKart) elif isinstance(dnaGroup, DNAVisGroup) and not overrideDNAZone: zoneId = ZoneUtil.getTrueZoneId(int(dnaGroup.getName().split(':')[0]), zoneId) for i in range(dnaGroup.getNumChildren()): (childGolfKarts, childGolfKartGroups) = self.findAndCreateGolfKarts(dnaGroup.at(i), zoneId, area, overrideDNAZone, type) golfKarts += childGolfKarts golfKartGroups += childGolfKartGroups return (golfKarts, golfKartGroups)
def createPlanner(self, zoneId): zoneId = ZoneUtil.getTrueZoneId(zoneId, self.zoneId) sp = DistributedSuitPlannerAI.DistributedSuitPlannerAI(self.air, zoneId) sp.generateWithRequired(zoneId) sp.d_setZoneId(zoneId) self.air.suitPlanners[zoneId] = sp self.notify.debug('Created new SuitPlanner at %s' % zoneId)
def setup(self): self.dnaStore = toonbase.tcr.playGame.dnaStore self.randomGenerator = random.Random() self.randomGenerator.seed(self.zoneId) self.interior = loader.loadModel( 'phase_4/models/modules/gagShop_interior') self.interior.reparentTo(render) hoodId = ZoneUtil.getHoodId(self.zoneId) self.colors = ToonInteriorColors.colors[hoodId] self.replaceRandomInModel(self.interior) door = self.chooseDoor() doorOrigin = render.find('**/door_origin;+s') doorNP = door.copyTo(doorOrigin) doorOrigin.setScale(0.8, 0.8, 0.8) doorOrigin.setPos(doorOrigin, 0, -0.025, 0) doorColor = self.randomGenerator.choice(self.colors['TI_door']) DNADoor.DNADoor.setupDoor(doorNP, self.interior, doorOrigin, self.dnaStore, str(self.block), doorColor) doorFrame = doorNP.find('door_*_flat') doorFrame.wrtReparentTo(self.interior) doorFrame.setColor(doorColor) del self.colors del self.dnaStore del self.randomGenerator self.interior.flattenMedium()
def enterQuietZone(self, requestStatus): base.transitions.noTransitions() loaderName = requestStatus['loader'] zoneID = requestStatus['zoneId'] where = requestStatus['where'] if where == 'playground' or where == 'toonInterior': name = self.id elif where == 'minigame': name = 'Minigame' elif where == 'street': name = CIGlobals.BranchZone2StreetName[ZoneUtil.getBranchZone( zoneID)] if loaderName == 'safeZoneLoader' or loaderName == 'townLoader': if not loader.inBulkBlock: loader.beginBulkLoad( 'hood', name, CIGlobals.safeZoneLSRanges.get(self.id, 6)) self.loadLoader(requestStatus) else: base.transitions.fadeScreen(1.0) self._quietZoneDoneEvent = uniqueName('quietZoneDone') self.acceptOnce(self._quietZoneDoneEvent, self.handleQuietZoneDone) self.quietZoneStateData = QuietZoneState(self._quietZoneDoneEvent) self.quietZoneStateData.load() self.quietZoneStateData.enter(requestStatus)
def __handleBookSwitchShard(self, requestStatus): params = [] params.append(requestStatus['shardId']) params.append(base.cr.playGame.hood.id) params.append(ZoneUtil.getZoneId(base.cr.playGame.hood.id)) params.append(base.localAvatar.doId) base.cr.gameFSM.request('switchShards', params)
def enterTunnelOut(self, requestStatus): hoodId = requestStatus['hoodId'] zoneId = requestStatus['zoneId'] how = requestStatus['how'] tunnelOrigin = requestStatus['tunnelOrigin'] tunnelName = toonbase.tcr.hoodMgr.makeLinkTunnelName(self.loader.hood.id, self.getZoneId()) self.doneStatus = { 'loader': ZoneUtil.getLoaderName(zoneId), 'where': ZoneUtil.getToonWhereName(zoneId), 'how': how, 'hoodId': hoodId, 'zoneId': zoneId, 'shardId': None, 'tunnelName': tunnelName } self.accept('tunnelOutMovieDone', self._Place__tunnelOutMovieDone) toonbase.localToon.tunnelOut(tunnelOrigin)
def findAndCreatePicnicTables(self, dnaGroup, zoneId, area, overrideDNAZone = 0, type = 'picnic_table'): picnicTables = [] picnicTableGroups = [] if isinstance(dnaGroup, DNAGroup) and string.find(dnaGroup.getName(), type) >= 0: if type == 'picnic_table': nameInfo = dnaGroup.getName().split('_') pos = Point3(0, 0, 0) hpr = Point3(0, 0, 0) for i in range(dnaGroup.getNumChildren()): childDnaGroup = dnaGroup.at(i) if string.find(childDnaGroup.getName(), 'picnic_table') >= 0: pos = childDnaGroup.getPos() hpr = childDnaGroup.getHpr() break picnicTable = DistributedPicnicBasketAI.DistributedPicnicBasketAI(self.air, nameInfo[2], pos[0], pos[1], pos[2], hpr[0], hpr[1], hpr[2]) picnicTable.generateWithRequired(zoneId) picnicTables.append(picnicTable) else: if isinstance(dnaGroup, DNAVisGroup) and not overrideDNAZone: zoneId = ZoneUtil.getTrueZoneId(int(dnaGroup.getName().split(':')[0]), zoneId) for i in range(dnaGroup.getNumChildren()): childPicnicTables = self.findAndCreatePicnicTables(dnaGroup.at(i), zoneId, area, overrideDNAZone, type) picnicTables += childPicnicTables return picnicTables
def enter(self, destHood): doneStatus = {} def letThrough(self = self, doneStatus = doneStatus): doneStatus['mode'] = 'pass' messenger.send(self.doneEvent, [doneStatus]) if not base.restrictTrialers: letThrough() return if base.roamingTrialers: letThrough() return if base.cr.isPaid(): letThrough() return if ZoneUtil.getCanonicalHoodId(destHood) in (ToontownGlobals.ToontownCentral, ToontownGlobals.MyEstate, ToontownGlobals.GoofySpeedway): letThrough() return else: try: base.localAvatar.b_setAnimState('neutral', 1) except: pass doneStatus['mode'] = 'fail' self.doneStatus = doneStatus self.dialog = TeaserPanel.TeaserPanel(pageName='otherHoods', doneFunc=self.handleOk)
def findAndCreateGameTables(self, dnaGroup, zoneId, area, overrideDNAZone=0, type='game_table'): picnicTables = [] picnicTableGroups = [] if isinstance(dnaGroup, DNAGroup) and string.find(dnaGroup.getName(), type) >= 0: if type == 'game_table': nameInfo = dnaGroup.getName().split('_') pos = Point3(0, 0, 0) hpr = Point3(0, 0, 0) for i in range(dnaGroup.getNumChildren()): childDnaGroup = dnaGroup.at(i) if string.find(childDnaGroup.getName(), 'game_table') >= 0: pos = childDnaGroup.getPos() hpr = childDnaGroup.getHpr() break picnicTable = DistributedPicnicTableAI.DistributedPicnicTableAI( self.air, zoneId, nameInfo[2], pos[0], pos[1], pos[2], hpr[0], hpr[1], hpr[2]) picnicTables.append(picnicTable) else: if isinstance(dnaGroup, DNAVisGroup) and not overrideDNAZone: zoneId = ZoneUtil.getTrueZoneId( int(dnaGroup.getName().split(':')[0]), zoneId) for i in range(dnaGroup.getNumChildren()): childPicnicTables = self.findAndCreateGameTables( dnaGroup.at(i), zoneId, area, overrideDNAZone, type) picnicTables += childPicnicTables return picnicTables
def addLinkTunnelHooks(self, hoodPart, nodeList): tunnelOriginList = [] for i in nodeList: linkTunnelNPC = i.findAllMatches('**/linktunnel*') for p in range(linkTunnelNPC.getNumPaths()): linkTunnel = linkTunnelNPC.getPath(p) name = linkTunnel.getName() hoodStr = name[11:13] zoneStr = name[14:18] hoodId = self.getIdFromName(hoodStr) zoneId = int(zoneStr) linkSphere = linkTunnel.find('**/tunnel_trigger') if not linkSphere.isEmpty(): linkSphere.node().setName('tunnel_trigger_' + hoodStr + '_' + zoneStr) else: linkSphere = linkTunnel.find('**/tunnel_trigger_' + hoodStr + '_' + zoneStr) if linkSphere.isEmpty(): self.notify.error('tunnel_trigger not found') tunnelOrigin = linkTunnel.find('**/tunnel_origin') if tunnelOrigin.isEmpty(): self.notify.error('tunnel_origin not found') tunnelOriginPlaceHolder = render.attachNewNode('toph_' + hoodStr + '_' + zoneStr) tunnelOriginList.append(tunnelOriginPlaceHolder) tunnelOriginPlaceHolder.setPos(tunnelOrigin.getPos(render)) tunnelOriginPlaceHolder.setHpr(tunnelOrigin.getHpr(render)) hood = toonbase.localToon.cr.playGame.hood if ZoneUtil.tutorialDict: how = 'teleportIn' tutorialFlag = 1 else: how = 'tunnelIn' tutorialFlag = 0 hoodPart.accept('enter' + linkSphere.getName(), hoodPart.handleEnterTunnel, [ { 'loader': ZoneUtil.getLoaderName(zoneId), 'where': ZoneUtil.getToonWhereName(zoneId), 'how': how, 'hoodId': hoodId, 'zoneId': zoneId, 'shardId': None, 'tunnelOrigin': tunnelOriginPlaceHolder, 'tutorial': tutorialFlag }]) return tunnelOriginList
def handleBookCloseTeleport(self, hoodId, zoneId): if localAvatar.hasActiveBoardingGroup(): rejectText = TTLocalizer.BoardingCannotLeaveZone localAvatar.elevatorNotifier.showMe(rejectText) return self.requestLeave( { "loader": ZoneUtil.getBranchLoaderName(zoneId), "where": ZoneUtil.getToonWhereName(zoneId), "how": "teleportIn", "hoodId": hoodId, "zoneId": zoneId, "shardId": None, "avId": -1, } ) return
def handleToonInteriorDone(self): status = self.place.doneStatus if status['loader'] == 'townLoader' and ZoneUtil.getBranchZone(status['zoneId']) == self.branchZone and status['shardId'] == None or status['how'] == 'doorOut': self.fsm.request('quietZone', [status]) else: self.doneStatus = status messenger.send(self.doneEvent) return
def createGolfKarts(self): self.golfKarts = [] self.golfKartGroups = [] for zone in self.air.zoneTable[self.canonicalHoodId]: zoneId = ZoneUtil.getTrueZoneId(zone[0], self.zoneId) dnaData = self.air.dnaDataMap.get(zone[0], None) if isinstance(dnaData, DNAData): area = ZoneUtil.getCanonicalZoneId(zoneId) (foundKarts, foundKartGroups) = self.findAndCreateGolfKarts(dnaData, zoneId, area, overrideDNAZone = True) self.golfKarts += foundKarts self.golfKartGroups += foundKartGroups continue print self.golfKarts, self.golfKartGroups for golfKart in self.golfKarts: golfKart.start() self.addDistObj(golfKart)
def handleToonInteriorDone(self): status = self.place.doneStatus if ZoneUtil.getBranchZone(status['zoneId']) == self.hood.id and status['shardId'] == None: self.fsm.request('quietZone', [ status]) else: self.doneStatus = status messenger.send(self.doneEvent)
def createBuildingManagers(self): for zone in self.air.zoneTable[self.canonicalHoodId]: if zone[1]: zoneId = ZoneUtil.getTrueZoneId(zone[0], self.zoneId) dnaStore = self.air.dnaStoreMap[zone[0]] mgr = DistributedBuildingMgrAI.DistributedBuildingMgrAI(self.air, zoneId, dnaStore, self.air.trophyMgr) self.buildingManagers.append(mgr) self.air.buildingManagers[zoneId] = mgr