def canAccess(self, zoneId=None): if base.cr.isPaid(): return True allowed = False allowedZones = [ ToontownGlobals.ToontownCentral, ToontownGlobals.MyEstate, ToontownGlobals.GoofySpeedway, ToontownGlobals.Tutorial, ] specialZones = [ToontownGlobals.SellbotLobby] if hasattr(base.cr, "newsManager") and base.cr.newsManager: holidayIds = base.cr.newsManager.getHolidayIdList() if ToontownGlobals.SELLBOT_NERF_HOLIDAY in holidayIds: specialZones.append(ToontownGlobals.SellbotHQ) place = base.cr.playGame.getPlace() if zoneId: myHoodId = ZoneUtil.getCanonicalHoodId(zoneId) else: myHoodId = ZoneUtil.getCanonicalHoodId(place.zoneId) if hasattr(place, "id"): myHoodId = place.id if myHoodId in allowedZones: allowed = True elif zoneId and zoneId in specialZones: allowed = True return allowed
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 enter(self): ShtikerPage.ShtikerPage.enter(self) try: zone = base.cr.playGame.getPlace().getZoneId() except: zone = 0 if base.localAvatar.lastHood >= ToontownGlobals.BossbotHQ: self.safeZoneButton['text'] = TTLocalizer.MapPageBackToCogHQ else: self.safeZoneButton['text'] = TTLocalizer.MapPageBackToPlayground if zone and ZoneUtil.isPlayground(zone) or self.book.safeMode: self.safeZoneButton.hide() else: self.safeZoneButton.show() if base.cr.playGame.getPlaceId() == ToontownGlobals.MyEstate and base.cr.playGame.hood.loader.atMyEstate() or self.book.safeMode: self.goHomeButton.hide() elif base.housingEnabled: self.goHomeButton.show() if base.cr.playGame.getPlaceId() == ToontownGlobals.MyEstate: if base.cr.playGame.hood.loader.atMyEstate(): self.hoodLabel['text'] = TTLocalizer.MapPageYouAreAtHome self.hoodLabel.show() else: avatar = base.cr.identifyAvatar(base.cr.playGame.hood.loader.estateOwnerId) if avatar: avName = avatar.getName() self.hoodLabel['text'] = TTLocalizer.MapPageYouAreAtSomeonesHome % TTLocalizer.GetPossesive(avName) self.hoodLabel.show() elif zone: hoodName = ToontownGlobals.hoodNameMap.get(ZoneUtil.getCanonicalHoodId(zone), ('',))[-1] streetName = ToontownGlobals.StreetNames.get(ZoneUtil.getCanonicalBranchZone(zone), ('',))[-1] if hoodName: self.hoodLabel['text'] = TTLocalizer.MapPageYouAreHere % (hoodName, streetName) self.hoodLabel.show() else: self.hoodLabel.hide() else: self.hoodLabel.hide() safeZonesVisited = base.localAvatar.hoodsVisited hoodTeleportList = base.localAvatar.getTeleportAccess() for hood in self.allZones: label = self.labels[self.allZones.index(hood)] clouds = self.clouds[self.allZones.index(hood)] if not self.book.safeMode and hood in safeZonesVisited: label['text_fg'] = (0, 0, 0, 1) label.show() for cloud in clouds: cloud.hide() fullname = base.cr.hoodMgr.getFullnameFromId(hood) if hood in hoodTeleportList: text = TTLocalizer.MapPageGoTo % fullname label['text'] = ('', text, text) else: label['text'] = ('', fullname, fullname) else: label.hide() for cloud in clouds: cloud.show()
def enteringARace(self, status): if not status["where"] == "golfcourse": return 0 if ZoneUtil.isDynamicZone(status["zoneId"]): return status["hoodId"] == self.hood.hoodId else: return ZoneUtil.getHoodId(status["zoneId"]) == self.hood.hoodId
def updateQuestInfo(self): for marker in self.buildingMarkers: marker.destroy() self.buildingMarkers = [] dnaData = base.cr.playGame.dnaData for questIndex in self.av.questPage.quests.keys(): questDesc = self.av.questPage.quests.get(questIndex) if questDesc is None: continue mapIndex = questIndex + 1 questId, fromNpcId, toNpcId, rewardId, toonProgress = questDesc quest = Quests.getQuest(questId) fComplete = quest.getCompletionStatus(self.av, questDesc) == Quests.COMPLETE if not fComplete: if quest.getType() == Quests.RecoverItemQuest: if quest.getHolder() == Quests.AnyFish: self.putBuildingMarker(self.fishingSpotInfo, mapIndex=mapIndex) continue elif quest.getType() != Quests.DeliverGagQuest and quest.getType() != Quests.DeliverItemQuest and quest.getType() != Quests.VisitQuest and quest.getType() != Quests.TrackChoiceQuest: continue if toNpcId == Quests.ToonHQ: self.putBuildingMarker(self.hqPosInfo, mapIndex=mapIndex) else: npcZone = NPCToons.getNPCZone(toNpcId) hoodId = ZoneUtil.getCanonicalHoodId(npcZone) branchId = ZoneUtil.getCanonicalBranchZone(npcZone) if self.hoodId == hoodId and self.zoneId == branchId: for blockId, block in dnaData.getBlocks(): zone = block.zone branchZone = zone - zone % 100 finalZone = branchZone + 500 + blockId if npcZone == finalZone: building = block.node self.putBuildingMarker(Point3(building.getPos()), building.getHpr(), mapIndex=mapIndex)
def enteringARace(self, status): if not status['where'] == 'racetrack': return 0 if ZoneUtil.isDynamicZone(status['zoneId']): return status['hoodId'] == self.hood.hoodId else: return ZoneUtil.getHoodId(status['zoneId']) == self.hood.hoodId
def requestTeleport(self, loaderId, whereId, hoodId, zoneId, avId): place = base.cr.playGame.getPlace() if loaderId == "": loaderId = ZoneUtil.getBranchLoaderName(zoneId) if whereId == "": whereId = ZoneUtil.getToonWhereName(zoneId) if hoodId == 0: hoodId = place.loader.hood.id if avId == 0: avId = -1 place.fsm.forceTransition( "teleportOut", [ { "loader": loaderId, "where": whereId, "how": "teleportIn", "hoodId": hoodId, "zoneId": zoneId, "shardId": None, "avId": avId, } ], ) return
def updateMap(self): if self.av: hoodId = ZoneUtil.getCanonicalHoodId(self.av.getLocation()[1]) zoneId = ZoneUtil.getCanonicalBranchZone(self.av.getLocation()[1]) try: mapsGeom = loader.loadModel('phase_4/models/questmap/%s_maps' % ToontownGlobals.dnaMap[hoodId]) except: self.stop() return mapImage = mapsGeom.find('**/%s_%s_english' % (ToontownGlobals.dnaMap[hoodId], zoneId)) if not mapImage.isEmpty(): self.container['image'] = mapImage self.resetFrameSize() self.cornerPosInfo = QuestMapGlobals.CornerPosTable.get('%s_%s_english' % (ToontownGlobals.dnaMap[hoodId], zoneId)) self.hqPosInfo = QuestMapGlobals.HQPosTable.get('%s_%s_english' % (ToontownGlobals.dnaMap[hoodId], zoneId)) self.fishingSpotInfo = QuestMapGlobals.FishingSpotPosTable.get('%s_%s_english' % (ToontownGlobals.dnaMap[hoodId], zoneId)) self.cogInfoPos = QuestMapGlobals.CogInfoPosTable.get('%s_%s_english' % (ToontownGlobals.dnaMap[hoodId], zoneId)) self.cogInfoFrame.setPos(self.cogInfoPos) self.hide() self.hoodId = hoodId self.zoneId = zoneId self.updateQuestInfo() self.updateCogInfo() taskMgr.add(self.update, 'questMapUpdate') else: self.stop() mapsGeom.removeNode()
def __lightDecorationOn__(): try: geom = base.cr.playGame.getPlace().loader.geom except: loaderId = ZoneUtil.getBranchLoaderName(2000) # TEMP hack. This will port you to ttc if ^ fails whereId = ZoneUtil.getToonWhereName(200) how = 'teleportIn' print ("This Should not happen.") requestStatus = [{ 'loader': loaderId, 'where': whereId, 'how': how, 'hoodId': 2000, 'zoneId': 2000, 'shardId': None, 'avId': -1 }] base.cr.playGame.getPlace().fsm.forceTransition('teleportOut', requestStatus) self.loader.hood.eventLights = geom.findAllMatches('**/*light*') self.loader.hood.eventLights += geom.findAllMatches('**/*lamp*') self.loader.hood.eventLights += geom.findAllMatches('**/prop_snow_tree*') self.loader.hood.eventLights += geom.findAllMatches('**/prop_tree*') self.loader.hood.eventLights += geom.findAllMatches('**/*christmas*') for light in self.loader.hood.eventLights: light.setColorScaleOff(1)
def enteringAGolfCourse(self, status): if not status['where'] == 'golfcourse': return 0 if ZoneUtil.isDynamicZone(status['zoneId']): return status['hoodId'] == self.hood.hoodId else: return ZoneUtil.getHoodId(status['zoneId']) == self.hood.hoodId
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')
def teleportToShop(self, npcId): if base.cr.playGame.getPlace().getState() != 'walk': return npcZone = NPCToons.getNPCZone(npcId) npcHood = ZoneUtil.getCanonicalHoodId(npcZone) hqZone = {2000:2520, 1000:1507, 3000:3508, 4000:4504, 5000:5502, 7000:7503, 9000:9505} if npcZone in (-1, 0, None): zoneId = base.localAvatar.getZoneId() if ZoneUtil.isDynamicZone(zoneId) or ZoneUtil.isCogHQZone(zoneId): zoneId = 2000 npcHood = ZoneUtil.getCanonicalHoodId(zoneId) npcZone = hqZone.get(npcHood, 2520) cost = ToontownGlobals.getTeleportButtonCost(npcHood) self.destroyDialog() base.cr.playGame.getPlace().setState('stopped') if base.localAvatar.getTotalMoney() < cost: self.dialog = TTDialog.TTDialog(style=TTDialog.Acknowledge, text=TTLocalizer.TeleportButtonNoMoney % cost, command=self.destroyDialog) else: self.dialog = TTDialog.TTDialog(style=TTDialog.YesNo, text=TTLocalizer.TeleportButtonConfirm % cost, command=lambda value: self.teleportToShopConfirm(npcZone, npcHood, cost, value)) self.dialog.show()
def handleStageWinEvent(self): StageInterior.notify.debug("handleStageWinEvent") if base.cr.playGame.getPlace().fsm.getCurrentState().getName() == "died": return self.stageDefeated = 1 if 1: zoneId = ZoneUtil.getHoodId(self.zoneId) else: zoneId = ZoneUtil.getSafeZoneId(base.localAvatar.defaultZone) self.fsm.request( "teleportOut", [ { "loader": ZoneUtil.getLoaderName(zoneId), "where": ZoneUtil.getToonWhereName(zoneId), "how": "teleportIn", "hoodId": zoneId, "zoneId": zoneId, "shardId": None, "avId": -1, } ], )
def enter(self, hoodId, zoneId, avId): if hoodId == ToontownGlobals.Tutorial: loaderName = "townLoader" whereName = "toonInterior" elif hoodId == ToontownGlobals.MyEstate: self.getEstateZoneAndGoHome(avId, zoneId) return elif hoodId == ToontownGlobals.PartyHood: self.getPartyZoneAndGoToParty(avId, zoneId) return else: loaderName = ZoneUtil.getLoaderName(zoneId) whereName = ZoneUtil.getToonWhereName(zoneId) self.fsm.request( "quietZone", [ { "loader": loaderName, "where": whereName, "how": "teleportIn", "hoodId": hoodId, "zoneId": zoneId, "shardId": None, "avId": avId, } ], ) return
def goHomeFailed(self, task): self.notify.debug("goHomeFailed") failedToVisitAvId = self.doneStatus.get("avId") if failedToVisitAvId > 0: message = TTLocalizer.EstateTeleportFailedNotFriends % base.cr.identifyAvatar(failedToVisitAvId).getName() else: message = TTLocalizer.EstateTeleportFailed self.notify.debug("goHomeFailed, why =: %s" % message) self.ignore("setLocalEstateZone") zoneId = base.localAvatar.lastHood loaderName = ZoneUtil.getLoaderName(zoneId) whereName = ZoneUtil.getToonWhereName(zoneId) base.localAvatar.setSystemMessage(0, message) self.fsm.request( "quietZone", [ { "loader": loaderName, "where": whereName, "how": "teleportIn", "hoodId": zoneId, "zoneId": zoneId, "shardId": None, } ], ) return Task.done
def createStartingBlocks(self): self.racingPads = [] self.viewingPads = [] racingPadGroups = [] viewingPadGroups = [] for zoneId in self.getZoneTable(): dnaData = self.air.dnaDataMap.get(zoneId, None) zoneId = ZoneUtil.getTrueZoneId(zoneId, self.zoneId) if dnaData.getName() == 'root': area = ZoneUtil.getCanonicalZoneId(zoneId) (foundRacingPads, foundRacingPadGroups) = self.findRacingPads(dnaData, zoneId, area, padType='racing_pad') (foundViewingPads, foundViewingPadGroups) = self.findRacingPads(dnaData, zoneId, area, padType='viewing_pad') self.racingPads.extend(foundRacingPads) racingPadGroups.extend(foundRacingPadGroups) self.viewingPads.extend(foundViewingPads) viewingPadGroups.extend(foundViewingPadGroups) self.startingBlocks = [] for (dnaGroup, racePad) in zip(racingPadGroups, self.racingPads): foundStartingBlocks = self.findStartingBlocks(dnaGroup, racePad) self.startingBlocks.extend(foundStartingBlocks) for startingBlock in foundStartingBlocks: racePad.addStartingBlock(startingBlock) self.viewingBlocks = [] for (dnaGroup, viewPad) in zip(viewingPadGroups, self.viewingPads): foundViewingBlocks = self.findStartingBlocks(dnaGroup, viewPad) self.viewingBlocks.extend(foundViewingBlocks) for viewingBlock in foundViewingBlocks: viewPad.addStartingBlock(viewingBlock)
def addLinkTunnelHooks(self, hoodPart, nodeList, currentZoneId): tunnelOriginList = [] for i in nodeList: linkTunnelNPC = i.findAllMatches('**/linktunnel*') for p in range(linkTunnelNPC.getNumPaths()): linkTunnel = linkTunnelNPC.getPath(p) name = linkTunnel.getName() nameParts = name.split('_') hoodStr = nameParts[1] zoneStr = nameParts[2] hoodId = self.getIdFromName(hoodStr) zoneId = int(zoneStr) hoodId = ZoneUtil.getTrueZoneId(hoodId, currentZoneId) zoneId = ZoneUtil.getTrueZoneId(zoneId, currentZoneId) linkSphere = linkTunnel.find('**/tunnel_trigger') if linkSphere.isEmpty(): linkSphere = linkTunnel.find('**/tunnel_sphere') if not linkSphere.isEmpty(): cnode = linkSphere.node() cnode.setName('tunnel_trigger_' + hoodStr + '_' + zoneStr) cnode.setCollideMask(ToontownGlobals.WallBitmask | ToontownGlobals.GhostBitmask) 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 = base.localAvatar.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 genDNAFileName(self, 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 handleWaitForSetZoneResponse(self, requestStatus): hoodId = requestStatus['hoodId'] canonicalHoodId = ZoneUtil.getCanonicalZoneId(hoodId) toHoodPhrase = ToontownGlobals.hoodNameMap[canonicalHoodId][0] hoodName = ToontownGlobals.hoodNameMap[canonicalHoodId][-1] zoneId = requestStatus['zoneId'] loaderName = requestStatus['loader'] avId = requestStatus.get('avId', -1) ownerId = requestStatus.get('ownerId', avId) if base.config.GetBool('want-qa-regression', 0): self.notify.info('QA-REGRESSION: NEIGHBORHOODS: Visit %s' % hoodName) count = ToontownGlobals.hoodCountMap[canonicalHoodId] if loaderName == 'safeZoneLoader': count += ToontownGlobals.safeZoneCountMap[canonicalHoodId] elif loaderName == 'townLoader': count += ToontownGlobals.townCountMap[canonicalHoodId] if not loader.inBulkBlock: if hoodId == ToontownGlobals.MyEstate: if avId == -1: loader.beginBulkLoad('hood', TTLocalizer.HeadingToYourEstate, count, 1, TTLocalizer.TIP_ESTATE) else: owner = base.cr.identifyAvatar(ownerId) if owner == None: friend = base.cr.identifyAvatar(avId) if friend != None: avName = friend.getName() loader.beginBulkLoad('hood', TTLocalizer.HeadingToFriend % avName, count, 1, TTLocalizer.TIP_ESTATE) else: self.notify.warning("we can't perform this teleport") return None else: avName = owner.getName() loader.beginBulkLoad('hood', TTLocalizer.HeadingToEstate % avName, count, 1, TTLocalizer.TIP_ESTATE) elif ZoneUtil.isCogHQZone(zoneId): loader.beginBulkLoad('hood', TTLocalizer.HeadingToHood % { 'to': toHoodPhrase, 'hood': hoodName }, count, 1, TTLocalizer.TIP_COGHQ) elif ZoneUtil.isGoofySpeedwayZone(zoneId): loader.beginBulkLoad('hood', TTLocalizer.HeadingToHood % { 'to': toHoodPhrase, 'hood': hoodName }, count, 1, TTLocalizer.TIP_KARTING) else: loader.beginBulkLoad('hood', TTLocalizer.HeadingToHood % { 'to': toHoodPhrase, 'hood': hoodName }, count, 1, TTLocalizer.TIP_GENERAL) if hoodId == ToontownGlobals.Tutorial: self.loadDnaStoreTutorial() else: self.loadDnaStore() hoodClass = self.getHoodClassByNumber(canonicalHoodId) self.hood = hoodClass(self.fsm, self.hoodDoneEvent, self.dnaStore, hoodId) self.hood.load() self.hood.loadLoader(requestStatus) if not base.placeBeforeObjects: loader.endBulkLoad('hood')
def __init__(self, air, zoneId): DistributedObjectAI.DistributedObjectAI.__init__(self, air) SuitPlannerBase.SuitPlannerBase.__init__(self) self.air = air self.zoneId = zoneId self.canonicalZoneId = ZoneUtil.getCanonicalZoneId(zoneId) if simbase.air.wantCogdominiums: if not hasattr(self.__class__, 'CogdoPopAdjusted'): self.__class__.CogdoPopAdjusted = True for index in xrange(len(self.SuitHoodInfo)): SuitBuildingGlobals[self.zoneId][0] = int(0.5 + self.CogdoPopFactor * SuitBuildingGlobals[self.zoneId][0]) SuitBuildingGlobals[self.zoneId][1] = int(0.5 + self.CogdoPopFactor * SuitBuildingGlobals[self.zoneId][1]) self.hoodInfoIdx = -1 for index in xrange(len(self.SuitHoodInfo)): currHoodInfo = self.SuitHoodInfo[index] if currHoodInfo[self.SUIT_HOOD_INFO_ZONE] == self.canonicalZoneId: self.hoodInfoIdx = index self.currDesired = None self.baseNumSuits = ( self.SuitHoodInfo[self.hoodInfoIdx][self.SUIT_HOOD_INFO_MIN] + self.SuitHoodInfo[self.hoodInfoIdx][self.SUIT_HOOD_INFO_MAX]) / 2 self.targetNumSuitBuildings = SuitBuildingGlobals.buildingMinMax[self.zoneId][0] if ZoneUtil.isWelcomeValley(self.zoneId): self.targetNumSuitBuildings = 0 self.pendingBuildingTracks = [] self.pendingBuildingHeights = [] self.suitList = [] self.numFlyInSuits = 0 self.numBuildingSuits = 0 self.numAttemptingTakeover = 0 self.zoneInfo = {} self.zoneIdToPointMap = None self.cogHQDoors = [] self.battleList = [] self.battleMgr = BattleManagerAI.BattleManagerAI(self.air) self.setupDNA() if self.notify.getDebug(): self.notify.debug('Creating a building manager AI in zone' + str(self.zoneId)) self.buildingMgr = self.air.buildingManagers.get(self.zoneId) if self.buildingMgr: (blocks, hqBlocks, gagshopBlocks, petshopBlocks, kartshopBlocks, animBldgBlocks) = self.buildingMgr.getDNABlockLists() for currBlock in blocks: bldg = self.buildingMgr.getBuilding(currBlock) bldg.setSuitPlannerExt(self) for currBlock in animBldgBlocks: bldg = self.buildingMgr.getBuilding(currBlock) bldg.setSuitPlannerExt(self) self.dnaStore.resetBlockNumbers() self.initBuildingsAndPoints() numSuits = simbase.config.GetInt('suit-count', -1) if numSuits >= 0: self.currDesired = numSuits suitHood = simbase.config.GetInt('suits-only-in-hood', -1) if suitHood >= 0: if self.SuitHoodInfo[self.hoodInfoIdx][self.SUIT_HOOD_INFO_ZONE] != suitHood: self.currDesired = 0 self.suitCountAdjust = 0
def createGameTables(self): self.gameTables = [] for zoneId in self.getZoneTable(): dnaData = self.air.dnaDataMap.get(zoneId, None) zoneId = ZoneUtil.getTrueZoneId(zoneId, self.zoneId) if isinstance(dnaData, DNAData): area = ZoneUtil.getCanonicalZoneId(zoneId) foundGameTables = self.findGameTables(dnaData, zoneId, area, overrideDNAZone=True) self.gameTables.extend(foundGameTables)
def lookupDNAFileName(self, zoneId): zoneId = ZoneUtil.getCanonicalZoneId(zoneId) hoodId = ZoneUtil.getCanonicalHoodId(zoneId) hood = ToontownGlobals.dnaMap[hoodId] if hoodId == zoneId: zoneId = 'sz' phaseNum = ToontownGlobals.phaseMap[hoodId] else: phaseNum = ToontownGlobals.streetPhaseMap[hoodId] return 'phase_%s/dna/%s_%s.pdna' % (phaseNum, hood, zoneId)
def kickToonsOut(self): if not self.localToonOnBoard: zoneId = self.cr.playGame.hood.hoodId self.cr.playGame.getPlace().fsm.request( 'teleportOut', [{'loader': ZoneUtil.getLoaderName(zoneId), 'where': ZoneUtil.getToonWhereName(zoneId), 'how': 'teleportIn', 'hoodId': zoneId, 'zoneId': zoneId, 'shardId': None, 'avId': -1}]) return
def forcedExit(self, avId): target_sz = base.localAvatar.defaultZone base.cr.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}], force=1) return
def localToonDied(self): target_sz = ZoneUtil.getSafeZoneId(localAvatar.defaultZone) place = self.cr.playGame.getPlace() place.fsm.request( 'died', [{'loader': ZoneUtil.getLoaderName(target_sz), 'where': ZoneUtil.getWhereName(target_sz, 1), 'how': 'teleportIn', 'hoodId': target_sz, 'zoneId': target_sz, 'shardId': None, 'avId': -1, 'battle': 1}]) return
def updateSavedBy(self, savedBy): if self.savedBy: for (avId, name, dna) in self.savedBy: if not ZoneUtil.isWelcomeValley(self.zoneId): self.trophyMgr.removeTrophy(avId, self.numFloors) self.savedBy = savedBy if self.savedBy: for (avId, name, dna) in self.savedBy: if not ZoneUtil.isWelcomeValley(self.zoneId): self.trophyMgr.addTrophy(avId, name, self.numFloors)
def enterTutorial(self, branchZone, streetZone, shopZone, hqZone): base.localAvatar.cantLeaveGame = 1 ZoneUtil.overrideOn(branch = branchZone, exteriorList = [ streetZone], interiorList = [ shopZone, hqZone]) messenger.send('startTutorial', [ shopZone]) self.acceptOnce('stopTutorial', self._TutorialManager__handleStopTutorial) self.acceptOnce('toonArrivedTutorial', self.d_toonArrived)
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 genDNAFileName(self): try: return simbase.air.genDNAFileName(self.getZoneId()) except: zoneId = ZoneUtil.getCanonicalZoneId(self.getZoneId()) hoodId = ZoneUtil.getCanonicalHoodId(zoneId) hood = ToontownGlobals.dnaMap[hoodId] phase = ToontownGlobals.streetPhaseMap[hoodId] if hoodId == zoneId: zoneId = 'sz' return 'phase_%s/dna/%s_%s.dna' % (phase, hood, zoneId)
def createGolfKarts(self): self.golfKarts = [] for zoneId in self.getZoneTable(): dnaData = self.air.dnaDataMap.get(zoneId, None) zoneId = ZoneUtil.getTrueZoneId(zoneId, self.zoneId) if dnaData.getName() == 'root': area = ZoneUtil.getCanonicalZoneId(zoneId) foundGolfKarts = self.findGolfKarts(dnaData, zoneId, area, overrideDNAZone=True) self.golfKarts.extend(foundGolfKarts) for golfKart in self.golfKarts: golfKart.start()
def setup(self): self.dnaStore = base.cr.playGame.dnaStore self.randomGenerator = random.Random() self.randomGenerator.seed(self.zoneId) self.interior = loader.loadModel( 'phase_3.5/models/modules/toon_interior_tutorial') self.interior.reparentTo(render) dnaStore = DNAStorage() node = loader.loadDNAFile(self.cr.playGame.hood.dnaStore, 'phase_3.5/dna/tutorial_street.dna') self.street = render.attachNewNode(node) self.street.flattenMedium() self.street.setPosHpr(-17, 42, -0.5, 180, 0, 0) self.street.find('**/tb2:toon_landmark_TT_A1_DNARoot').stash() self.street.find( '**/tb1:toon_landmark_hqTT_DNARoot/**/door_flat_0').stash() self.street.findAllMatches('**/+CollisionNode').stash() self.skyFile = 'phase_3.5/models/props/TT_sky' self.sky = loader.loadModel(self.skyFile) self.sky.setScale(0.8) self.sky.reparentTo(render) self.sky.setDepthTest(0) self.sky.setDepthWrite(0) self.sky.setBin('background', 100) self.sky.find('**/Sky').reparentTo(self.sky, -1) hoodId = ZoneUtil.getCanonicalHoodId(self.zoneId) self.colors = ToonInteriorColors.colors[hoodId] self.replaceRandomInModel(self.interior) doorModelName = 'door_double_round_ul' if doorModelName[-1:] == 'r': doorModelName = doorModelName[:-1] + 'l' else: doorModelName = doorModelName[:-1] + 'r' door = self.dnaStore.findNode(doorModelName) door_origin = render.find('**/door_origin;+s') doorNP = door.copyTo(door_origin) door_origin.setScale(0.8, 0.8, 0.8) door_origin.setPos(door_origin, 0, -0.025, 0) color = self.randomGenerator.choice(self.colors['TI_door']) DNADoor.setupDoor(doorNP, self.interior, door_origin, self.dnaStore, str(self.block), color) doorFrame = doorNP.find('door_*_flat') doorFrame.wrtReparentTo(self.interior) doorFrame.setColor(color) del self.colors del self.dnaStore del self.randomGenerator self.interior.flattenMedium() npcOrigin = self.interior.find('**/npc_origin_' + ` (self.npc.posIndex) `) if not npcOrigin.isEmpty(): self.npc.reparentTo(npcOrigin) self.npc.clearMat() self.createSuit() self.mickeyMovie = QuestParser.NPCMoviePlayer('tutorial_mickey', base.localAvatar, self.npc) place = base.cr.playGame.getPlace() if place and hasattr(place, 'fsm') and place.fsm.getCurrentState().getName(): self.notify.info('Tutorial movie: Place ready.') self.playMovie() else: self.notify.info( 'Tutorial movie: Waiting for place=%s, has fsm=%s' % (place, hasattr(place, 'fsm'))) if hasattr(place, 'fsm'): self.notify.info('Tutorial movie: place state=%s' % place.fsm.getCurrentState().getName()) self.acceptOnce('enterTutorialInterior', self.playMovie)
def __chooseFish(self, av, zoneId): rodId = av.getFishingRod() branchZone = ZoneUtil.getCanonicalBranchZone(zoneId) success, genus, species, weight = FishGlobals.getRandomFishVitals( branchZone, rodId) return (success, genus, species, weight)
def makeDictionaries(self, dnaStore): self.nodeDict = {} self.zoneDict = {} self.nodeList = [] self.fadeInDict = {} self.fadeOutDict = {} a1 = Vec4(1, 1, 1, 1) a0 = Vec4(1, 1, 1, 0) numVisGroups = dnaStore.getNumDNAVisGroups() for i in range(numVisGroups): groupFullName = dnaStore.getDNAVisGroupName(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) self.nodeDict[zoneId] = [] self.nodeList.append(groupNode) self.zoneDict[zoneId] = groupNode 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 range(numVisGroups): groupFullName = dnaStore.getDNAVisGroupName(i) zoneId = int(base.cr.hoodMgr.extractGroupName(groupFullName)) zoneId = ZoneUtil.getTrueZoneId(zoneId, self.zoneId) for j in range(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 getVisZoneId(self): exteriorZoneId = base.cr.playGame.hood.dnaStore.getZoneFromBlockNumber( self.block) visZoneId = ZoneUtil.getTrueZoneId(exteriorZoneId, self.zoneId) return visZoneId
def enter(self, requestStatus): self.fsm.enterInitialState() messenger.send('enterPlayground') self.accept('doorDoneEvent', self.handleDoorDoneEvent) self.accept('DistributedDoor_doorTrigger', self.handleDoorTrigger) base.playMusic(self.loader.music, looping=1, volume=0.8) self.loader.geom.reparentTo(render) for i in self.loader.nodeList: self.loader.enterAnimatedProps(i) self._telemLimiter = TLGatherAllAvs('Playground', RotationLimitToH) def __lightDecorationOn__(): geom = base.cr.playGame.hood.loader.geom self.loader.hood.halloweenLights = geom.findAllMatches('**/*light*') self.loader.hood.halloweenLights += geom.findAllMatches('**/*lamp*') self.loader.hood.halloweenLights += geom.findAllMatches('**/prop_snow_tree*') for light in self.loader.hood.halloweenLights: light.setColorScaleOff(0) 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), Func(__lightDecorationOn__)) 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() NametagGlobals.setMasterArrowsOn(1) self.zoneId = requestStatus['zoneId'] self.tunnelOriginList = base.cr.hoodMgr.addLinkTunnelHooks(self, self.loader.nodeList, self.zoneId) how = requestStatus['how'] if how == 'teleportIn': how = 'deathAck' self.fsm.request(how, [requestStatus]) base.cr.discordManager.setInfo(base.cr.discordManager.getState(), None, ToontownGlobals.Zone2String.get(ZoneUtil.getHoodId(self.zoneId)), None, None, None, self.zoneId) return
def getFullnameFromId(self, hoodId): hoodId = ZoneUtil.getCanonicalZoneId(hoodId) return ToontownGlobals.hoodNameMap[hoodId][-1]
def enter(self): ShtikerPage.ShtikerPage.enter(self) # Get the current street name try: zone = base.cr.playGame.getPlace().getZoneId() except: zone = 0 # if we are going to an HQ, change the button if base.localAvatar.lastHood >= ToontownGlobals.BossbotHQ: self.safeZoneButton['text'] = TTLocalizer.MapPageBackToCogHQ else: self.safeZoneButton['text'] = TTLocalizer.MapPageBackToPlayground if ((zone and ZoneUtil.isPlayground(zone)) or self.book.safeMode): self.safeZoneButton.hide() else: self.safeZoneButton.show() if ((base.cr.playGame.getPlaceId() == ToontownGlobals.MyEstate and base.cr.playGame.hood.loader.atMyEstate()) or self.book.safeMode): self.goHomeButton.hide() elif base.housingEnabled: self.goHomeButton.show() if base.cr.playGame.getPlaceId() == ToontownGlobals.MyEstate: if base.cr.playGame.hood.loader.atMyEstate(): self.hoodLabel['text'] = (TTLocalizer.MapPageYouAreAtHome) self.hoodLabel.show() else: avatar = base.cr.identifyAvatar( base.cr.playGame.hood.loader.estateOwnerId) if avatar: avName = avatar.getName() self.hoodLabel['text'] = ( TTLocalizer.MapPageYouAreAtSomeonesHome % (TTLocalizer.GetPossesive(avName))) self.hoodLabel.show() elif zone: hoodName = ToontownGlobals.hoodNameMap.get( ZoneUtil.getCanonicalHoodId(zone), ("", ))[-1] streetName = ToontownGlobals.StreetNames.get( ZoneUtil.getCanonicalBranchZone(zone), ("", ))[-1] # Make sure we have a hoodName to report # It is ok if we do not have a street name, it will just be empty if hoodName: self.hoodLabel['text'] = (TTLocalizer.MapPageYouAreHere % (hoodName, streetName)) self.hoodLabel.show() else: self.hoodLabel.hide() else: self.hoodLabel.hide() safeZonesVisited = base.localAvatar.hoodsVisited hoodsAvailable = base.cr.hoodMgr.getAvailableZones() #print("### hoods visited = ", safeZonesVisited) #print("### hoods avail = ", hoodsAvailable) # The hoods that we can see is the intersection of the zones we have # visited and the hoods that are available hoodVisibleList = PythonUtil.intersection(safeZonesVisited, hoodsAvailable) #print("### hoods viz = ", hoodVisibleList) # The hoods that we can teleport to is the intersection of the hoods # we can see and the hoods the local toon has teleport access to hoodTeleportList = base.localAvatar.getTeleportAccess() for hood in self.allZones: label = self.labels[self.allZones.index(hood)] clouds = self.clouds[self.allZones.index(hood)] # If we can see that hood, show the button, hide the clouds if ((not self.book.safeMode) and (hood in hoodVisibleList)): label.show() for cloud in clouds: cloud.hide() fullname = base.cr.hoodMgr.getFullnameFromId(hood) if hood in hoodTeleportList: text = (TTLocalizer.MapPageGoTo % fullname) label['text'] = ("", text, text) else: label['text'] = ("", fullname, fullname) # If we cannot see that hood, hide the button, show the clouds else: label.hide() for cloud in clouds: cloud.show() return
def enter(self): ShtikerPage.ShtikerPage.enter(self) try: zone = base.cr.playGame.getPlace().getZoneId() except: zone = 0 if base.localAvatar.lastHood >= ToontownGlobals.BossbotHQ: self.safeZoneButton['text'] = TTLocalizer.MapPageBackToCogHQ else: self.safeZoneButton['text'] = TTLocalizer.MapPageBackToPlayground if zone and ZoneUtil.isPlayground(zone) or self.book.safeMode: self.safeZoneButton.hide() else: self.safeZoneButton.show() if base.cr.playGame.getPlaceId( ) == ToontownGlobals.MyEstate and base.cr.playGame.hood.loader.atMyEstate( ) or self.book.safeMode: self.goHomeButton.hide() elif base.housingEnabled: self.goHomeButton.show() if base.cr.playGame.getPlaceId() == ToontownGlobals.MyEstate: if base.cr.playGame.hood.loader.atMyEstate(): self.hoodLabel['text'] = TTLocalizer.MapPageYouAreAtHome self.hoodLabel.show() else: avatar = base.cr.identifyAvatar( base.cr.playGame.hood.loader.estateOwnerId) if avatar: avName = avatar.getName() self.hoodLabel[ 'text'] = TTLocalizer.MapPageYouAreAtSomeonesHome % TTLocalizer.GetPossesive( avName) self.hoodLabel.show() elif zone: hoodName = ToontownGlobals.hoodNameMap.get( ZoneUtil.getCanonicalHoodId(zone), ('', ))[-1] streetName = ToontownGlobals.StreetNames.get( ZoneUtil.getCanonicalBranchZone(zone), ('', ))[-1] if hoodName: self.hoodLabel['text'] = TTLocalizer.MapPageYouAreHere % ( hoodName, streetName) self.hoodLabel.show() else: self.hoodLabel.hide() else: self.hoodLabel.hide() safeZonesVisited = base.localAvatar.hoodsVisited hoodsAvailable = base.cr.hoodMgr.getAvailableZones() hoodVisibleList = PythonUtil.intersection(safeZonesVisited, hoodsAvailable) hoodTeleportList = base.localAvatar.getTeleportAccess() for hood in self.allZones: label = self.labels[self.allZones.index(hood)] clouds = self.clouds[self.allZones.index(hood)] if not self.book.safeMode and hood in hoodVisibleList: label['text_fg'] = (0, 0, 0, 1) label.show() for cloud in clouds: cloud.hide() fullname = base.cr.hoodMgr.getFullnameFromId(hood) if hood in hoodTeleportList: text = TTLocalizer.MapPageGoTo % fullname label['text'] = ('', text, text) else: label['text'] = ('', fullname, fullname) else: label['text_fg'] = (0, 0, 0, 0.65) label.show() for cloud in clouds: cloud.show()
def begin(self, range, label, gui, tipCategory, zoneId): info = self.textures[ZoneUtil.isCogHQZone(zoneId) if zoneId else 2] self.waitBar['range'] = range self.title['text'] = label 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 / 4.95), base.a2dRight - (base.a2dRight / 4.95), -0.03, 0.03) self.title['text_font'] = info[1] self.title['text_fg'] = info[2] self.title.reparentTo(base.a2dpBottomLeft, LOADING_SCREEN_SORT_INDEX) self.title.setPos(base.a2dRight / 5, 0, 0.235) self.tip['text'] = self.getTip(tipCategory) self.gui.setPos(0, -0.1, 0) self.gui.reparentTo(aspect2d, LOADING_SCREEN_SORT_INDEX) self.gui.setTexture(info[0], 1) 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 update(self, questDesc): questId, fromNpcId, toNpcId, rewardId, toonProgress = questDesc quest = Quests.getQuest(questId) self.teleportButton['command'] = self.teleportToShop self.teleportButton['extraArgs'] = [toNpcId] 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 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(string.capwords, quest.getObjectiveStrings()) imageColor = Vec4(*self.colors['white']) self.teleportButton.hide() if base.localAvatar.tutorialAck and (fComplete or quest.getType() in (Quests.DeliverGagQuest, Quests.DeliverItemQuest, Quests.VisitQuest, Quests.TrackChoiceQuest)): self.teleportButton.show() self.teleportButton.setPos(0.3, 0, -0.15) if isinstance(quest, Quests.TexturedQuest) and quest.hasFrame(): frame = quest.getFrame() frameBgColor = frame[1] lIconGeom = frame[0] lIconGeomScale = 0.13 if not fComplete: infoText = quest.getLocationName() if infoText == '': infoText = TTLocalizer.QuestPosterAnywhere elif 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 in SuitDNA.suitDeptModelPaths: icon = cogIcons.find(SuitDNA.suitDeptModelPaths[holder]) 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 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.CogPartQuest: frameBgColor = 'green' bookModel = loader.loadModel('phase_3.5/models/gui/stickerbook_gui') lIconGeom = bookModel.find('**/CogArmIcon2') 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.RescueQuest: frameBgColor = 'blue' lIconGeom = self.createNpcToonHead(random.choice(NPCToons.HQnpcFriends.keys())) lIconGeomScale = 0.13 infoText = quest.getLocationName().strip() elif 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 in SuitDNA.suitDeptModelPaths: icon = cogIcons.find(SuitDNA.suitDeptModelPaths[dept]) 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 in SuitDNA.suitDeptModelPaths: icon = cogIcons.find(SuitDNA.suitDeptModelPaths[dept]) 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
def getVisZoneId(self): exteriorZoneId = base.cr.playGame.dnaData.getBlock(self.block).zone visZoneId = ZoneUtil.getTrueZoneId(exteriorZoneId, self.zoneId) return visZoneId
def __init__(self, doneEvent, petSeed, petNameIndex): zoneId = ZoneUtil.getCanonicalSafeZoneId( base.localAvatar.getZoneId()) name, dna, traitSeed = PetUtil.getPetInfoFromSeed(petSeed, zoneId) name = PetNameGenerator.PetNameGenerator().getName(petNameIndex) cost = PetUtil.getPetCostFromSeed(petSeed, zoneId) model = loader.loadModel('phase_4/models/gui/AdoptPet') modelPos = (0, 0, -0.3) modelScale = 0.055 DirectFrame.__init__(self, relief=None, state='normal', geom=model, geom_color=ToontownGlobals.GlobalDialogColor, geom_scale=modelScale, frameSize=(-1, 1, -1, 1), pos=modelPos, text=TTLocalizer.PetshopAdoptConfirm % (name, cost), text_wordwrap=12, text_scale=0.05, text_pos=(0, 0.55), text_fg=text0Color) self.initialiseoptions(PetshopGUI.AdoptPetDlg) self.petView = self.attachNewNode('petView') self.petView.setPos(-0.13, 0, 0.8) self.petModel = Pet.Pet(forGui=1) self.petModel.setDNA(dna) self.petModel.fitAndCenterHead(0.395, forGui=1) self.petModel.reparentTo(self.petView) self.petModel.setH(130) self.petModel.enterNeutralHappy() self.moneyDisplay = DirectLabel( parent=self, relief=None, text=str(base.localAvatar.getTotalMoney()), text_scale=0.075, text_fg=(0.95, 0.95, 0, 1), text_shadow=(0, 0, 0, 1), text_pos=(0.225, 0.33), text_font=ToontownGlobals.getSignFont()) self.accept(localAvatar.uniqueName('moneyChange'), self.__moneyChange) self.accept(localAvatar.uniqueName('bankMoneyChange'), self.__moneyChange) okImageList = (model.find('**/CheckButtonUp'), model.find('**/CheckButtonDown'), model.find('**/CheckButtonRollover')) cancelImageList = (model.find('**/CancelButtonUp'), model.find('**/CancelButtonDown'), model.find('**/CancelRollover')) cancelIcon = model.find('**/CancelIcon') checkIcon = model.find('**/CheckIcon') self.cancelButton = DirectButton( parent=self, relief=None, image=cancelImageList, geom=cancelIcon, scale=modelScale, text=('', TTLocalizer.PetshopGoBack), text_pos=(-5.8, 4.4), text_scale=0.7, pressEffect=False, command=lambda: messenger.send(doneEvent, [0])) self.okButton = DirectButton( parent=self, relief=None, image=okImageList, geom=checkIcon, scale=modelScale, text=('', TTLocalizer.PetshopAdopt), text_pos=(5.8, 4.4), text_scale=0.7, pressEffect=False, command=lambda: messenger.send(doneEvent, [1])) model.removeNode() return
def handleWaitForSetZoneResponse(self, requestStatus): hoodId = requestStatus['hoodId'] canonicalHoodId = ZoneUtil.getCanonicalZoneId(hoodId) toHoodPhrase = ToontownGlobals.hoodNameMap[canonicalHoodId][0] hoodName = ToontownGlobals.hoodNameMap[canonicalHoodId][-1] zoneId = requestStatus['zoneId'] loaderName = requestStatus['loader'] avId = requestStatus.get('avId', -1) ownerId = requestStatus.get('ownerId', avId) if base.config.GetBool('want-qa-regression', 0): self.notify.info('QA-REGRESSION: NEIGHBORHOODS: Visit %s' % hoodName) count = ToontownGlobals.hoodCountMap[canonicalHoodId] if loaderName == 'safeZoneLoader': count += ToontownGlobals.safeZoneCountMap[canonicalHoodId] elif loaderName == 'townLoader': count += ToontownGlobals.townCountMap[canonicalHoodId] if not loader.inBulkBlock: if hoodId == ToontownGlobals.MyEstate: if avId == -1: loader.beginBulkLoad('hood', TTLocalizer.HeadingToYourEstate, count, 1, TTLocalizer.TIP_ESTATE, zoneId) else: owner = base.cr.identifyAvatar(ownerId) if owner == None: friend = base.cr.identifyAvatar(avId) if friend != None: avName = friend.getName() loader.beginBulkLoad( 'hood', TTLocalizer.HeadingToFriend % avName, count, 1, TTLocalizer.TIP_ESTATE, zoneId) else: self.notify.warning( "we can't perform this teleport") return else: avName = owner.getName() loader.beginBulkLoad( 'hood', TTLocalizer.HeadingToEstate % avName, count, 1, TTLocalizer.TIP_ESTATE, zoneId) elif ZoneUtil.isCogHQZone(zoneId): loader.beginBulkLoad( 'hood', TTLocalizer.HeadingToHood % { 'to': toHoodPhrase, 'hood': hoodName }, count, 1, TTLocalizer.TIP_COGHQ, zoneId) elif ZoneUtil.isGoofySpeedwayZone(zoneId): loader.beginBulkLoad( 'hood', TTLocalizer.HeadingToHood % { 'to': toHoodPhrase, 'hood': hoodName }, count, 1, TTLocalizer.TIP_KARTING, zoneId) else: loader.beginBulkLoad( 'hood', TTLocalizer.HeadingToHood % { 'to': toHoodPhrase, 'hood': hoodName }, count, 1, TTLocalizer.TIP_GENERAL, zoneId) if hoodId == ToontownGlobals.Tutorial: self.loadDnaStoreTutorial() else: if not hasattr(self, 'dnaStore'): self.loadDnaStore() hoodClass = self.getHoodClassByNumber(canonicalHoodId) self.hood = hoodClass(self.fsm, self.hoodDoneEvent, self.dnaStore, hoodId) self.hood.load() self.hood.loadLoader(requestStatus) if not base.placeBeforeObjects: loader.endBulkLoad('hood') return
def setup(self): self.dnaStore = base.cr.playGame.dnaStore self.randomGenerator = random.Random() self.randomGenerator.seed(self.zoneId) interior = self.randomDNAItem('TI_room', self.dnaStore.findNode) self.interior = interior.copyTo(render) hoodId = ZoneUtil.getCanonicalHoodId(self.zoneId) self.colors = ToonInteriorColors.colors[hoodId] self.replaceRandomInModel(self.interior) doorModelName = 'door_double_round_ul' if doorModelName[-1:] == 'r': doorModelName = doorModelName[:-1] + 'l' else: doorModelName = doorModelName[:-1] + 'r' door = self.dnaStore.findNode(doorModelName) door_origin = render.find('**/door_origin;+s') doorNP = door.copyTo(door_origin) door_origin.setScale(0.8, 0.8, 0.8) door_origin.setPos(door_origin, 0, -0.025, 0) color = self.randomGenerator.choice(self.colors['TI_door']) DNADoor.setupDoor(doorNP, self.interior, door_origin, self.dnaStore, str(self.block), color) doorFrame = doorNP.find('door_*_flat') doorFrame.wrtReparentTo(self.interior) doorFrame.setColor(color) sign = hidden.find('**/sz%s:*_landmark_*_DNARoot/**/sign;+s' % (self.block, )) if not sign.isEmpty(): signOrigin = self.interior.find('**/sign_origin;+s') newSignNP = sign.copyTo(signOrigin) mat = self.dnaStore.getSignTransformFromBlockNumber(int( self.block)) inv = Mat4(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) inv.invertFrom(mat) newSignNP.setMat(inv) newSignNP.flattenLight() ll = Point3() ur = Point3() newSignNP.calcTightBounds(ll, ur) width = ur[0] - ll[0] height = ur[2] - ll[2] if width != 0 and height != 0: xScale = (SIGN_RIGHT - SIGN_LEFT) / width zScale = (SIGN_TOP - SIGN_BOTTOM) / height scale = min(xScale, zScale) xCenter = (ur[0] + ll[0]) / 2.0 zCenter = (ur[2] + ll[2]) / 2.0 newSignNP.setPosHprScale( (SIGN_RIGHT + SIGN_LEFT) / 2.0 - xCenter * scale, -0.1, (SIGN_TOP + SIGN_BOTTOM) / 2.0 - zCenter * scale, 0.0, 0.0, 0.0, scale, scale, scale) newSignNP.setZ(newSignNP.getZ() + 2.3) memorialNP = signOrigin.attachNewNode(TextNode('thankYouText')) memorialNP.node().setFont(ToontownGlobals.getFancyFont()) memorialNP.node().setText(TTLocalizer.PrivateServerTribute) memorialNP.node().setTextColor(0.501961, 0, 0.25098, 1) memorialNP.node().setAlign(TextNode.ACenter) memorialNP.setDepthWrite(1, 1) memorialNP.flattenLight() memorialNP.setZ(memorialNP.getZ() + 4.95) memorialNP.setScale(0.35) nowPlayingNP = signOrigin.attachNewNode( TextNode('nowPlayingText')) nowPlayingNP.node().setFont(ToontownGlobals.getFancyFont()) nowPlayingNP.node().setText(TTLocalizer.TributeSongPlaying) nowPlayingNP.node().setTextColor(0.501961, 0, 0.25098, 1) nowPlayingNP.setDepthWrite(1, 1) nowPlayingNP.flattenLight() nowPlayingNP.setX(nowPlayingNP.getX() - 2.35) nowPlayingNP.setZ(nowPlayingNP.getZ() - 1.35) nowPlayingNP.setScale(0.65) trophyOrigin = self.interior.find('**/trophy_origin') pos = 1.25 - 5.0 imageFrames = hidden.attachNewNode('imageFrames') cm = CardMaker('card') for i in xrange(4): frame = loader.loadModel('phase_3.5/models/modules/trophy_frame') frame.setScale(FrameScale, 1.0, FrameScale) frame.reparentTo(imageFrames) frame.setPos(pos, 0, 0) imageCard = frame.attachNewNode(cm.generate()) imageTex = loader.loadTexture('phase_14.5/maps/tt_logo_%s.png' % (i + 1)) imageCard.setTexture(imageTex) imageCard.setX(imageCard.getX() - 0.5) imageCard.setZ(imageCard.getZ() - 0.5) imageCard.setDepthOffset(1000) imageCard.setTransparency(TransparencyAttrib.MAlpha) imageCard.flattenLight() pos += 2.5 if imageFrames: imageFrames.reparentTo(trophyOrigin) del self.colors del self.dnaStore del self.randomGenerator self.interior.flattenMedium()
def initGagFrame(self, toon, expList, meritList, noSkip=False): self.notify.debug('Initializing Gag Frame!') self.avNameLabel['text'] = toon.getName() self.hqBonusLabel.hide() try: zoneId = base.cr.playGame.getPlace().getTaskZoneId() except: zoneId = 0 if hasattr(base.cr, 'newsManager'): if base.cr.newsManager.isHolidayRunning( ToontownGlobals.MORE_XP_HOLIDAY): self.multiplierLabel['text'] = "5x Gag Multiplier" if base.cr.newsManager.getInvading(): self.hqBonusLabel['text'] = TTLocalizer.CogInvasionBonus if ZoneUtil.isCogHQZone(zoneId): self.hqBonusLabel['text'] = TTLocalizer.CogHQBonus if base.cr.newsManager.getInvading() and ZoneUtil.isCogHQZone( zoneId): self.hqBonusLabel['text'] = TTLocalizer.MegaBonus if ZoneUtil.isCogHQZone(zoneId) or self.hqBonusLabel['text'] != '': self.hqBonusLabel.show() self.growShrink = Sequence( LerpScaleInterval(self.hqBonusLabel, 1, 1.1, 0.9, blendType='easeInOut'), LerpScaleInterval(self.hqBonusLabel, 1, 0.9, 1.1, blendType='easeInOut')) self.growShrink.loop() self.endTrackFrame.hide() self.gagExpFrame.show() self.multiplierLabel.show() self.newGagFrame.hide() self.promotionFrame.hide() self.questFrame.hide() self.itemFrame.hide() self.cogPartFrame.hide() self.missedItemFrame.hide() trackBarOffset = 0 self.skipButton['state'] = DGG.DISABLED if noSkip else DGG.NORMAL for i in xrange(len(SuitDNA.suitDepts)): meritBar = self.meritBars[i] meritLabel = self.meritLabels[i] totalMerits = CogDisguiseGlobals.getTotalMerits(toon, i) merits = meritList[i] self.meritIncLabels[i].hide() if CogDisguiseGlobals.isSuitComplete(toon.cogParts, i): if not self.trackBarsOffset: trackBarOffset = 0.47 self.trackBarsOffset = 1 meritBar.show() meritLabel.show() meritLabel.show() if totalMerits: meritBar['range'] = totalMerits meritBar['value'] = merits if merits == totalMerits: meritBar['text'] = TTLocalizer.RewardPanelMeritAlert else: meritBar['text'] = '%s/%s %s' % ( merits, totalMerits, TTLocalizer.RewardPanelMeritBarLabels[i]) else: meritBar['range'] = 1 meritBar['value'] = 1 meritBar['text'] = TTLocalizer.RewardPanelMeritsMaxed self.resetMeritBarColor(i) else: meritBar.hide() meritLabel.hide() for i in xrange(len(expList)): curExp = expList[i] trackBar = self.trackBars[i] trackLabel = self.trackLabels[i] trackIncLabel = self.trackIncLabels[i] trackBar.setX(trackBar.getX() - trackBarOffset) trackLabel.setX(trackLabel.getX() - trackBarOffset) trackIncLabel.setX(trackIncLabel.getX() - trackBarOffset) trackIncLabel.hide() if toon.hasTrackAccess(i): trackBar.show() if curExp >= ToontownBattleGlobals.UnpaidMaxSkills[ i] and toon.getGameAccess() != OTPGlobals.AccessFull: nextExp = self.getNextExpValue(curExp, i) trackBar['range'] = nextExp trackBar['value'] = ToontownBattleGlobals.UnpaidMaxSkills[ i] trackBar['text'] = TTLocalizer.InventoryGuestExp elif curExp >= ToontownBattleGlobals.regMaxSkill: nextExp = self.getNextExpValueUber(curExp, i) trackBar['range'] = nextExp uberCurrExp = curExp - ToontownBattleGlobals.regMaxSkill trackBar['value'] = uberCurrExp trackBar['text'] = TTLocalizer.InventoryUberTrackExp % { 'nextExp': ToontownBattleGlobals.MaxSkill - curExp } else: nextExp = self.getNextExpValue(curExp, i) trackBar['range'] = nextExp trackBar['value'] = curExp trackBar['text'] = '%s/%s' % (curExp, nextExp) self.resetBarColor(i) else: trackBar.hide()
def wantsNametag(self): """ return true if this door needs an arrow pointing to it. """ # We don't create nametags for interior doors. return not ZoneUtil.isInterior(self.zoneId)
def __init__(self, air, zoneId): DistributedObjectAI.DistributedObjectAI.__init__(self, air) SuitPlannerBase.SuitPlannerBase.__init__(self) self.air = air self.zoneId = zoneId self.canonicalZoneId = ZoneUtil.getCanonicalZoneId(zoneId) if simbase.air.wantCogdominiums: if not hasattr(self.__class__, 'CogdoPopAdjusted'): self.__class__.CogdoPopAdjusted = True for index in range(len(self.SuitHoodInfo)): SuitBuildingGlobals.buildingMinMax[self.zoneId][0] = int( 0.5 + self.CogdoPopFactor * SuitBuildingGlobals.buildingMinMax[self.zoneId][0]) SuitBuildingGlobals.buildingMinMax[self.zoneId][1] = int( 0.5 + self.CogdoPopFactor * SuitBuildingGlobals.buildingMinMax[self.zoneId][1]) self.hoodInfoIdx = -1 for index in range(len(self.SuitHoodInfo)): currHoodInfo = self.SuitHoodInfo[index] if currHoodInfo[self.SUIT_HOOD_INFO_ZONE] == self.canonicalZoneId: self.hoodInfoIdx = index self.currDesired = None self.baseNumSuits = ( self.SuitHoodInfo[self.hoodInfoIdx][self.SUIT_HOOD_INFO_MIN] + self.SuitHoodInfo[self.hoodInfoIdx][self.SUIT_HOOD_INFO_MAX]) / 2 self.targetNumSuitBuildings = SuitBuildingGlobals.buildingMinMax[ self.zoneId][0] if ZoneUtil.isWelcomeValley(self.zoneId): self.targetNumSuitBuildings = 0 self.pendingBuildingTracks = [] self.pendingBuildingHeights = [] self.suitList = [] self.numFlyInSuits = 0 self.numBuildingSuits = 0 self.numAttemptingTakeover = 0 self.zoneInfo = {} self.zoneIdToPointMap = None self.cogHQDoors = [] self.battleList = [] self.battleMgr = BattleManagerAI.BattleManagerAI(self.air) self.setupDNA() if self.notify.getDebug(): self.notify.debug('Creating a building manager AI in zone' + str(self.zoneId)) self.buildingMgr = self.air.buildingManagers.get(self.zoneId) if self.buildingMgr: (blocks, hqBlocks, gagshopBlocks, petshopBlocks, kartshopBlocks, bankBlocks, libraryBlocks, animBldgBlocks) = self.buildingMgr.getDNABlockLists() for currBlock in blocks: bldg = self.buildingMgr.getBuilding(currBlock) bldg.setSuitPlannerExt(self) for currBlock in animBldgBlocks: bldg = self.buildingMgr.getBuilding(currBlock) bldg.setSuitPlannerExt(self) self.dnaStore.resetBlockNumbers() self.initBuildingsAndPoints() numSuits = simbase.config.GetInt('suit-count', -1) if numSuits >= 0: self.currDesired = numSuits suitHood = simbase.config.GetInt('suits-only-in-hood', -1) if suitHood >= 0: if self.SuitHoodInfo[self.hoodInfoIdx][ self.SUIT_HOOD_INFO_ZONE] != suitHood: self.currDesired = 0 self.suitCountAdjust = 0
def knockKnockTrack(self, avatar, duration): if avatar == None: return None self.rimshot = base.loadSfx('phase_5/audio/sfx/AA_heal_telljoke.mp3') self.knockSfx = base.loadSfx('phase_5/audio/sfx/GUI_knock_3.mp3') joke = KnockKnockJokes[self.propId % len(KnockKnockJokes)] place = base.cr.playGame.getPlace() if place: zone = place.getZoneId() branch = ZoneUtil.getBranchZone(zone) if branch == ToontownGlobals.SillyStreet: if self.propId == 44: joke = KnockKnockContestJokes[ToontownGlobals.SillyStreet] elif branch == ToontownGlobals.LoopyLane: if self.propId in KnockKnockContestJokes[ ToontownGlobals.LoopyLane].keys(): joke = KnockKnockContestJokes[ToontownGlobals.LoopyLane][ self.propId] elif branch == ToontownGlobals.PunchlinePlace: if self.propId == 1: joke = KnockKnockContestJokes[ ToontownGlobals.PunchlinePlace] elif 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 None self.nametag = NametagGroup() self.nametag.setAvatar(doorNP) self.nametag.setFont(ToontownGlobals.getToonFont()) self.nametag.setName(TTLocalizer.DoorNametag) self.nametag.setActive(0) self.nametag.manage(base.marginManager) self.nametag.getNametag3d().setBillboardOffset(4) nametagNode = self.nametag.getNametag3d().upcastToPandaNode() 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 isInThisHq(self, status): if ZoneUtil.isDynamicZone(status['zoneId']): return status['hoodId'] == self.hood.hoodId else: return ZoneUtil.getHoodId(status['zoneId']) == self.hood.hoodId
def enter(self, requestStatus): self.fsm.enterInitialState() self._telemLimiter = TLGatherAllAvs('SuitInterior', RotationLimitToH) self.zoneId = requestStatus['zoneId'] self.accept('DSIDoneEvent', self.handleDSIDoneEvent) base.cr.discordManager.setInfo(base.cr.discordManager.getState(), TTLocalizer.DiscordCogBuilding, ToontownGlobals.Zone2String.get(ZoneUtil.getHoodId(self.zoneId)), None, None, None, self.zoneId) return
def getCurrentShardId(self): zoneId = self.getCurrentZoneId() if zoneId != None and ZoneUtil.isWelcomeValley(zoneId): return ToontownGlobals.WelcomeValleyToken else: return base.localAvatar.defaultShard
def setZoneIdAndBlock(self, zoneId, block): self.zoneId = zoneId self.block = block canonicalZoneId = ZoneUtil.getCanonicalZoneId(zoneId) if canonicalZoneId in (ToontownGlobals.BossbotHQ, ToontownGlobals.BossbotLobby): self.doorX = 1.0
def wantsNametag(self): return not ZoneUtil.isInterior(self.zoneId)
def disable(self): self.ignoreAll() ZoneUtil.overrideOff() DistributedObject.DistributedObject.disable(self)
def begin(self, range, label, gui, tipCategory, zoneId): self.zone2background = { ToontownGlobals.ToontownCentral: 'ttc.jpg', ToontownGlobals.DonaldsDock: 'dd.jpg', ToontownGlobals.DaisyGardens: 'dg.jpg', ToontownGlobals.MinniesMelodyland: 'mml.jpg', ToontownGlobals.TheBrrrgh: 'tb.jpg', ToontownGlobals.DonaldsDreamland: 'ddl.jpg', ToontownGlobals.OutdoorZone: 'aa.jpg', ToontownGlobals.GoofySpeedway: 'gs.jpg', ToontownGlobals.SellbotHQ: 'sbhq.jpg', ToontownGlobals.SellbotFactoryExt: 'sbhqext.jpg', ToontownGlobals.LawbotHQ: 'lbhq.jpg', ToontownGlobals.CashbotHQ: 'cbhq.jpg', ToontownGlobals.BossbotHQ: 'bbhq.jpg' } self.zone2fontcolor = { ToontownGlobals.GoofySpeedway: VBase4(ToontownGlobals.GSCOLOR), ToontownGlobals.ToontownCentral: VBase4(ToontownGlobals.TTCOLOR), ToontownGlobals.SillyStreet: VBase4(ToontownGlobals.TTCOLOR), ToontownGlobals.LoopyLane: VBase4(ToontownGlobals.TTCOLOR), ToontownGlobals.PunchlinePlace: VBase4(ToontownGlobals.TTCOLOR), ToontownGlobals.DonaldsDock: VBase4(ToontownGlobals.DDCOLOR), ToontownGlobals.BarnacleBoulevard: VBase4(ToontownGlobals.DDCOLOR), ToontownGlobals.SeaweedStreet: VBase4(ToontownGlobals.DDCOLOR), ToontownGlobals.LighthouseLane: VBase4(ToontownGlobals.DDCOLOR), ToontownGlobals.AhoyAvenue: VBase4(ToontownGlobals.DDCOLOR), ToontownGlobals.DaisyGardens: VBase4(ToontownGlobals.DGCOLOR), ToontownGlobals.ElmStreet: VBase4(ToontownGlobals.DGCOLOR), ToontownGlobals.MapleStreet: VBase4(ToontownGlobals.DGCOLOR), ToontownGlobals.OakStreet: VBase4(ToontownGlobals.DGCOLOR), ToontownGlobals.RoseValley: VBase4(ToontownGlobals.DGCOLOR), ToontownGlobals.MinniesMelodyland: VBase4(ToontownGlobals.MMCOLOR), ToontownGlobals.AltoAvenue: VBase4(ToontownGlobals.MMCOLOR), ToontownGlobals.BaritoneBoulevard: VBase4(ToontownGlobals.MMCOLOR), ToontownGlobals.TenorTerrace: VBase4(ToontownGlobals.MMCOLOR), ToontownGlobals.SopranoStreet: VBase4(ToontownGlobals.MMCOLOR), ToontownGlobals.TheBrrrgh: VBase4(ToontownGlobals.BRCOLOR), ToontownGlobals.WalrusWay: VBase4(ToontownGlobals.BRCOLOR), ToontownGlobals.SleetStreet: VBase4(ToontownGlobals.BRCOLOR), ToontownGlobals.PolarPlace: VBase4(ToontownGlobals.BRCOLOR), ToontownGlobals.DonaldsDreamland: VBase4(ToontownGlobals.DLCOLOR), ToontownGlobals.LullabyLane: VBase4(ToontownGlobals.DLCOLOR), ToontownGlobals.PajamaPlace: VBase4(ToontownGlobals.DLCOLOR), ToontownGlobals.OutdoorZone: VBase4(ToontownGlobals.OZCOLOR), ToontownGlobals.GolfZone: VBase4(ToontownGlobals.OZCOLOR), ToontownGlobals.SellbotHQ: (0.2, 0.2, 0.2, 1.0), ToontownGlobals.SellbotFactoryExt: (0.2, 0.2, 0.2, 1.0), ToontownGlobals.SellbotFactoryInt: (0.2, 0.2, 0.2, 1.0), ToontownGlobals.CashbotHQ: (0.2, 0.2, 0.2, 1.0), ToontownGlobals.LawbotHQ: (0.2, 0.2, 0.2, 1.0), ToontownGlobals.BossbotHQ: (0.2, 0.2, 0.2, 1.0) } self.waitBar['barColor'] = self.zone2fontcolor.get( ZoneUtil.getBranchZone(zoneId), ToontownGlobals.DEFAULTCOLOR) self.waitBar['range'] = range * 2 self.title['text'] = label self.__count = 0 self.__expectedCount = range * 2 if gui: self.title.reparentTo(base.a2dpBottomCenter, NO_FADE_SORT_INDEX) self.title.setPos(0, 0, 0.23) self.gui.setPos(0, -0.1, 0) self.gui.reparentTo(aspect2d, NO_FADE_SORT_INDEX) self.tip['text'] = self.getTip(tipCategory) bg = 'phase_3.5/maps/loading/' + self.zone2background.get( ZoneUtil.getBranchZone(zoneId), 'toon.jpg') self.gui.setTexture(loader.loadTexture(bg), 1) self.logo.reparentTo(base.a2dpTopCenter, NO_FADE_SORT_INDEX) else: self.title.reparentTo(base.a2dpTopCenter, NO_FADE_SORT_INDEX) self.gui.reparentTo(hidden) self.logo.reparentTo(hidden) self.title['text_fg'] = self.zone2fontcolor.get( ZoneUtil.getBranchZone(zoneId), ToontownGlobals.DEFAULTCOLOR) self.tip.reparentTo(base.a2dpBottomCenter, NO_FADE_SORT_INDEX) self.waitBar.reparentTo(base.a2dpBottomCenter, NO_FADE_SORT_INDEX) self.waitBar.update(self.__count)
def _TutorialManager__handleStopTutorial(self): base.localAvatar.cantLeaveGame = 0 self.d_allDone() ZoneUtil.overrideOff()
def getPhaseFromHood(self, hoodId): hoodId = ZoneUtil.getCanonicalHoodId(hoodId) return ToontownGlobals.phaseMap[hoodId]
def __init__(self, doneEvent, petSeed, gender): zoneId = ZoneUtil.getCanonicalSafeZoneId( base.localAvatar.getZoneId()) name, dna, traitSeed = PetUtil.getPetInfoFromSeed(petSeed, zoneId) self.gui = loader.loadModel('phase_4/models/gui/PetNamePanel') self.guiScale = 0.09 DirectFrame.__init__(self, relief=None, geom=self.gui, geom_scale=self.guiScale, state='normal', frameSize=(-1, 1, -1, 1)) self.initialiseoptions(PetshopGUI.NamePicker) self.petView = self.attachNewNode('petView') self.petView.setPos(-0.21, 0, -0.04) self.petModel = Pet.Pet(forGui=1) self.petModel.setDNA(dna) self.petModel.fitAndCenterHead(0.435, forGui=1) self.petModel.reparentTo(self.petView) self.petModel.setH(225) self.petModel.enterNeutralHappy() self.ng = PetNameGenerator.PetNameGenerator() if gender == 1: self.allNames = self.ng.boyFirsts else: self.allNames = self.ng.girlFirsts self.allNames += self.ng.neutralFirsts self.allNames.sort() self.checkNames() self.letters = [] for name in self.allNames: if name[0:TTLocalizer.PGUIcharLength] not in self.letters: self.letters.append(name[0:TTLocalizer.PGUIcharLength]) self.curLetter = self.letters[0] self.curNames = [] self.curName = '' self.alphabetList = self.makeScrollList( self.gui, (-0.012, 0, -0.075), (1, 0.8, 0.8, 1), self.letters, self.makeLabel, [TextNode.ACenter, 'alphabet'], 6) self.nameList = None self.rebuildNameList() self.randomButton = DirectButton( parent=self, relief=None, image=(self.gui.find('**/RandomUpButton'), self.gui.find('**/RandomDownButton'), self.gui.find('**/RandomRolloverButton')), scale=self.guiScale, text=TTLocalizer.RandomButton, text_pos=(-0.8, -5.7), text_scale=0.8, text_fg=text2Color, pressEffect=False, command=self.randomName) self.nameResult = DirectLabel(parent=self, relief=None, scale=self.guiScale, text='', text_align=TextNode.ACenter, text_pos=(-1.85, 2.6), text_fg=text0Color, text_scale=0.6, text_wordwrap=8) self.submitButton = DirectButton( parent=self, relief=None, image=(self.gui.find('**/SubmitUpButton'), self.gui.find('**/SubmitDownButton'), self.gui.find('**/SubmitRolloverButton')), scale=self.guiScale, text=TTLocalizer.PetshopAdopt, text_pos=(3.3, -5.7), text_scale=TTLocalizer.PGUIsubmitButton, text_fg=text0Color, pressEffect=False, command=lambda: messenger.send( doneEvent, [self.ng.returnUniqueID(self.curName)])) model = loader.loadModel('phase_4/models/gui/PetShopInterface') modelScale = 0.1 cancelImageList = (model.find('**/CancelButtonUp'), model.find('**/CancelButtonDown'), model.find('**/CancelButtonRollover')) cancelIcon = model.find('**/CancelIcon') self.cancelButton = DirectButton( parent=self, relief=None, pos=(-0.04, 0, -0.47), image=cancelImageList, geom=cancelIcon, scale=modelScale, pressEffect=False, command=lambda: messenger.send(doneEvent, [-1])) self.randomName() return
def spawnTitleText(self, zoneId, floorNum = None): if ZoneUtil.isMintInteriorZone(zoneId): text = '%s\n%s' % (ToontownGlobals.StreetNames[zoneId][-1], TTLocalizer.MintFloorTitle % (floorNum + 1)) self.doSpawnTitleText(text) else: CogHood.CogHood.spawnTitleText(self, zoneId)
def handleLeftQuietZone(self): status = self.quietZoneStateData.getRequestStatus() hoodId = ZoneUtil.getCanonicalZoneId(status['hoodId']) hoodState = self.getHoodStateByNumber(hoodId) self.fsm.request(hoodState, [status])