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 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 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 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 setup(self): interior = loader.loadModel('phase_14/models/modules/pizzeria') self.interior = interior.copyTo(render) self.interior.find('**/floor').setBin('ground', -10) self.dnaStore = base.cr.playGame.dnaStore self.randomGenerator = random.Random() self.randomGenerator.seed(self.zoneId) hoodId = ZoneUtil.getCanonicalHoodId(self.zoneId) self.colors = ToonInteriorColors.colors[hoodId] door = self.dnaStore.findNode('door_double_round_ur') doorOrigin = self.interior.attachNewNode('door_origin') doorOrigin.setPos(0, 31.5, 0) doorOriginNPName = doorOrigin.getName() doorOriginIndexStr = doorOriginNPName[len('door_origin_'):] newNode = ModelNode('door_' + doorOriginIndexStr) newNodePath = NodePath(newNode) newNodePath.reparentTo(self.interior) doorNP = door.copyTo(newNodePath) doorOrigin.setScale(0.8, 0.8, 0.8) doorOrigin.setPos(doorOrigin, 0, -0.025, 0) color = self.randomGenerator.choice(self.colors['TI_door']) triggerId = str(self.block) + '_' + doorOriginIndexStr DNADoor.setupDoor(doorNP, newNodePath, doorOrigin, self.dnaStore, str(self.block), color) doorFrame = doorNP.find('door_*_flat') doorFrame.setColor(color)
def replaceRandom(self, root, generator=random): for nodePath in root.findAllMatches('**/random_???_*'): name = nodePath.getName() category = name[11:] if name[7] in ('m', 't'): codeCount = self.cr.playGame.dnaStore.getNumCatalogCodes( category) index = generator.randint(0, codeCount - 1) code = self.cr.playGame.dnaStore.getCatalogCode( category, index) if name[7] == 'm': _nodePath = self.cr.playGame.dnaStore.findNode( code).copyTo(nodePath) if name[8] == 'r': self.replaceRandom(_nodePath, generator=generator) else: texture = self.cr.playGame.dnaStore.findTexture(code) nodePath.setTexture(texture, 100) _nodePath = nodePath if name[8] == 'c': hoodId = ZoneUtil.getCanonicalHoodId(self.zoneId) colors = ToonInteriorColors.colors[hoodId] _nodePath.setColorScale(generator.choice(colors[category]))
def announceGenerate(self): DistributedObject.announceGenerate(self) self.interior = loader.loadModel( 'phase_4/models/modules/ttc_library_interior.bam') self.interior.reparentTo(render) generator = random.Random() generator.seed(self.zoneId) self.replaceRandom(self.interior, generator=generator) doorOrigin = self.interior.find('**/door_origin;+s') doorOrigin.setScale(0.8) doorOrigin.setY(doorOrigin, -0.025) door = self.cr.playGame.dnaStore.findNode('door_double_round_ur') doorNodePath = door.copyTo(doorOrigin) hoodId = ZoneUtil.getCanonicalHoodId(self.zoneId) doorColor = ToonInteriorColors.colors[hoodId]['TI_door'][0] DNADoor.setupDoor(doorNodePath, self.interior, doorOrigin, self.cr.playGame.dnaStore, str(self.block), doorColor) doorFrame = doorNodePath.find('door_double_round_ur_flat') doorFrame.wrtReparentTo(self.interior) doorFrame.setColor(doorColor) for npcToon in self.cr.doFindAllInstances(DistributedNPCToonBase): npcToon.initToonState()
def showChoicePoster(self, questId, fromNpcId, toNpcId, rewardId, callback): self.update((questId, fromNpcId, toNpcId, rewardId, 0)) quest = Quests.getQuest(questId) self.rewardText.show() self.rewardText.setZ(-0.205) self.questProgress.hide() if not hasattr(self, 'chooseButton'): guiButton = loader.loadModel('phase_3/models/gui/quit_button') self.chooseButton = DirectButton(parent=self.questFrame, relief=None, image=(guiButton.find('**/QuitBtn_UP'), guiButton.find('**/QuitBtn_DN'), guiButton.find('**/QuitBtn_RLVR')), image_scale=(0.7, 1, 1), text=TTLocalizer.QuestPageChoose, text_scale=0.06, text_pos=(0, -0.02), pos=(0.285, 0, 0.245), scale=0.65) guiButton.removeNode() npcZone = NPCToons.getNPCZone(toNpcId) hoodId = ZoneUtil.getCanonicalHoodId(npcZone) if not base.cr.isPaid() and (questId == 401 or hasattr(quest, 'getLocation') and quest.getLocation() == 1000 or hoodId == 1000): def showTeaserPanel(): TeaserPanel(pageName='getGags') self.chooseButton['command'] = showTeaserPanel else: self.chooseButton['command'] = callback self.chooseButton['extraArgs'] = [questId] self.unbind(DGG.WITHIN) self.unbind(DGG.WITHOUT) if not quest.getType() == Quests.TrackChoiceQuest: self.questInfo.setZ(-0.0625) return
def announceGenerate(self): DistributedObject.announceGenerate(self) self.interior = loader.loadModel('phase_4/models/modules/ttc_library_interior.bam') self.interior.reparentTo(render) generator = random.Random() generator.seed(self.zoneId) self.replaceRandom(self.interior, generator=generator) doorOrigin = self.interior.find('**/door_origin;+s') doorOrigin.setScale(0.8) doorOrigin.setY(doorOrigin, -0.025) door = self.cr.playGame.dnaStore.findNode('door_double_round_ur') doorNodePath = door.copyTo(doorOrigin) hoodId = ZoneUtil.getCanonicalHoodId(self.zoneId) doorColor = ToonInteriorColors.colors[hoodId]['TI_door'][0] DNADoor.setupDoor( doorNodePath, self.interior, doorOrigin, self.cr.playGame.dnaStore, str(self.block), doorColor) doorFrame = doorNodePath.find('door_double_round_ur_flat') doorFrame.wrtReparentTo(self.interior) doorFrame.setColor(doorColor) for npcToon in self.cr.doFindAllInstances(DistributedNPCToonBase): npcToon.initToonState()
def genDNAFileName(self): """ //////////////////////////////////////////////////////////////////// // Function: determines the name of the DNA file that should // be loaded for the neighborhood that this suit // planner manages // Parameters: none // Changes: none //////////////////////////////////////////////////////////////////// """ # This code might run on the AI or on the client. try: return simbase.air.genDNAFileName(self.getZoneId()) except: # do some number manipulation of my zone id already given # to me and figure out which dna file to load 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 setup(self): self.dnaStore = base.cr.playGame.dnaStore self.randomGenerator = random.Random() self.randomGenerator.seed(self.zoneId) interior = self.randomDNAItem('TI_hall', 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.80000000000000004, 0.80000000000000004, 0.80000000000000004) door_origin.setPos(door_origin, 0, -0.025000000000000001, 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() self.sillyFSM.enterInitialState()
def openToAll(zoneId, avatar): allowed = False canonicalZoneId = ZoneUtil.getCanonicalHoodId(zoneId) allowedZones = [ ToontownGlobals.ToontownCentral, ToontownGlobals.MyEstate, ToontownGlobals.GoofySpeedway, ToontownGlobals.Tutorial, ] specialZones = [ToontownGlobals.SellbotLobby] if ToontownGlobals.SELLBOT_NERF_HOLIDAY in simbase.air.holidayManager.currentHolidays: specialZones.append(ToontownGlobals.SellbotHQ) ownerId = simbase.air.estateMgr.getOwnerFromZone(zoneId) if ownerId: for zone in simbase.air.estateMgr.getEstateZones(ownerId): specialZones.append(zone) if canonicalZoneId in allowedZones or avatar.isInEstate(): allowed = True elif zoneId in specialZones: allowed = True elif canonicalZoneId >= ToontownGlobals.DynamicZonesBegin and not avatar.getTutorialAck(): zoneDict = simbase.air.tutorialManager.playerDict.get(avatar.doId) if zoneDict: allowed = True return allowed
def replaceStreetSignTextures(self): if not hasattr(base.cr, 'playGame'): return place = base.cr.playGame.getPlace() if place is None: return geom = base.cr.playGame.getPlace().loader.geom signs = geom.findAllMatches('**/*tunnelAheadSign*;+s') if signs.getNumPaths() > 0: streetSign = base.cr.streetSign signTexturePath = streetSign.StreetSignBaseDir + '/' + streetSign.StreetSignFileName loaderTexturePath = Filename(str(signTexturePath)) alphaPath = 'phase_4/maps/tt_t_ara_gen_tunnelAheadSign_a.rgb' inDreamland = False if place.zoneId and ZoneUtil.getCanonicalHoodId( place.zoneId) == ToontownGlobals.DonaldsDreamland: inDreamland = True alphaPath = 'phase_4/maps/tt_t_ara_gen_tunnelAheadSign_a.rgb' if Filename(signTexturePath).exists(): signTexture = loader.loadTexture(loaderTexturePath, alphaPath) for sign in signs: if Filename(signTexturePath).exists(): sign.setTexture(signTexture, 1) if inDreamland: sign.setColorScale(0.525, 0.525, 0.525, 1) return
def setup(self): self.dnaStore = base.cr.playGame.dnaStore self.randomGenerator = random.Random() self.randomGenerator.seed(self.zoneId) self.interior = loader.loadModel("phase_4/models/modules/PetShopInterior") self.interior.reparentTo(render) self.fish = Actor.Actor( "phase_4/models/props/interiorfish-zero", {"swim": "phase_4/models/props/interiorfish-swim"} ) self.fish.reparentTo(self.interior) self.fish.setColorScale(0.8, 0.9, 1, 0.8) self.fish.setScale(0.8) self.fish.setPos(0, 6, -4) self.fish.setPlayRate(0.7, "swim") self.fish.loop("swim") hoodId = ZoneUtil.getCanonicalHoodId(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.25, 0) doorColor = self.randomGenerator.choice(self.colors["TI_door"]) 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 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.pdna') 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']) 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.cr.doId2do[self.npcId].posIndex)`) if not npcOrigin.isEmpty(): self.cr.doId2do[self.npcId].reparentTo(npcOrigin) self.cr.doId2do[self.npcId].clearMat() self.createSuit() base.localAvatar.setPosHpr(-2, 12, 0, -10, 0, 0) self.cr.doId2do[self.npcId].setChatAbsolute(TTLocalizer.QuestScript101_0, CFSpeech) 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 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('**/tb%s:*_landmark_*_DNARoot/**/sign;+s' % (self.block, )) if not sign.isEmpty(): signOrigin = self.interior.find('**/sign_origin;+s') newSignNP = sign.copyTo(signOrigin) newSignNP.setDepthWrite(1, 1) 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) trophyOrigin = self.interior.find('**/trophy_origin') trophy = self.buildTrophy() if trophy: trophy.reparentTo(trophyOrigin) del self.colors del self.dnaStore del self.randomGenerator self.interior.flattenMedium()
def setup(self): self.dnaStore = base.cr.playGame.dnaStore self.randomGenerator = random.Random() self.randomGenerator.seed(self.zoneId) self.interior = loader.loadModel('phase_4/models/modules/PetShopInterior') self.interior.reparentTo(render) self.fish = Actor.Actor('phase_4/models/props/interiorfish-zero', {'swim': 'phase_4/models/props/interiorfish-swim'}) self.fish.reparentTo(self.interior) self.fish.setColorScale(0.8, 0.9, 1, 0.8) self.fish.setScale(0.8) self.fish.setPos(0, 6, -4) self.fish.setPlayRate(0.7, 'swim') self.fish.loop('swim') hoodId = ZoneUtil.getCanonicalHoodId(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.25, 0) doorColor = self.randomGenerator.choice(self.colors['TI_door']) 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() for npcToon in self.cr.doFindAllInstances(DistributedNPCToonBase): npcToon.initToonState()
def joinGroup(self, group, shardId): canonicalHoodId = ZoneUtil.getCanonicalHoodId(group) shardName = base.cr.activeDistrictMap[shardId].name hoodName = TTLocalizer.GlobalStreetNames[canonicalHoodId] teleportAccess = base.localAvatar.hasTeleportAccess(canonicalHoodId) if teleportAccess: message = TTLocalizer.GroupAskAccess elif base.localAvatar.defaultShard == shardId: self.acceptOnce('groupDialogDone', self.cleanupGroupDialog) self.groupDialog = TTDialog.TTGlobalDialog( style=TTDialog.Acknowledge, text=TTLocalizer.GroupAskNoAccessSame % (hoodName[0], hoodName[-1]), doneEvent='groupDialogDone') self.groupDialog.show() return else: message = TTLocalizer.GroupAskNoAccess self.acceptOnce('groupDialogDone', self.__handleGroupDialog, extraArgs=[ canonicalHoodId if teleportAccess else base.localAvatar.lastHood, shardId ]) self.groupDialog = TTDialog.TTGlobalDialog( style=TTDialog.TwoChoice, text=message % (hoodName[0], hoodName[-1], shardName), doneEvent='groupDialogDone') self.groupDialog.show()
def openToAll(zoneId, avatar): allowed = False canonicalZoneId = ZoneUtil.getCanonicalHoodId(zoneId) allowedZones = [ToontownGlobals.ToontownCentral, ToontownGlobals.MyEstate, ToontownGlobals.GoofySpeedway, ToontownGlobals.Tutorial] specialZones = [ToontownGlobals.SellbotLobby] if ToontownGlobals.SELLBOT_NERF_HOLIDAY in simbase.air.holidayManager.currentHolidays: specialZones.append(ToontownGlobals.SellbotHQ) ownerId = simbase.air.estateManager.getOwnerFromZone(zoneId) if ownerId: for zone in simbase.air.estateManager.getEstateZones(ownerId): specialZones.append(zone) if canonicalZoneId in allowedZones or avatar.isInEstate(): allowed = True else: if zoneId in specialZones: allowed = True else: if canonicalZoneId >= ToontownGlobals.DynamicZonesBegin and not avatar.getTutorialAck(): zoneDict = simbase.air.tutorialManager.playerDict.get(avatar.doId) if zoneDict: allowed = True return allowed
def choseShard(self, shardId): zoneId = self.getCurrentZoneId() canonicalHoodId = ZoneUtil.getCanonicalHoodId(base.localAvatar.lastHood) currentShardId = self.getCurrentShardId() if shardId == currentShardId: return None elif shardId == ToontownGlobals.WelcomeValleyToken: self.doneStatus = { 'mode': 'teleport', 'hood': ToontownGlobals.WelcomeValleyToken } messenger.send(self.doneEvent) elif shardId == base.localAvatar.defaultShard: self.doneStatus = { 'mode': 'teleport', 'hood': canonicalHoodId } messenger.send(self.doneEvent) else: try: place = base.cr.playGame.getPlace() except: try: place = base.cr.playGame.hood.loader.place except: place = base.cr.playGame.hood.place place.requestTeleport(canonicalHoodId, canonicalHoodId, shardId, -1)
def avatarEnter(self): avId = self.air.getAvatarIdFromSender() if not avId in self.air.doId2do: self.notify.warning('Avatar: %s not found' % avId) return if self.isBusy(): self.freeAvatar(avId) return self.petSeeds = self.air.petMgr.getAvailablePets( ZoneUtil.getCanonicalHoodId(self.zoneId)) numGenders = len(PetDNA.PetGenders) self.petSeeds *= numGenders self.petSeeds.sort() self.sendUpdateToAvatarId(avId, 'setPetSeeds', [self.petSeeds]) self.transactionType = '' av = self.air.doId2do[avId] self.busy = avId self.acceptOnce(self.air.getAvatarExitEvent(avId), self.__handleUnexpectedExit, extraArgs=[avId]) flag = NPCToons.SELL_MOVIE_START self.d_setMovie(avId, flag) taskMgr.doMethodLater(PetConstants.PETCLERK_TIMER, self.sendTimeoutMovie, self.uniqueName('clearMovie')) DistributedNPCToonBaseAI.avatarEnter(self)
def setup(self): self.dnaStore = base.cr.playGame.dnaStore self.randomGenerator = random.Random() self.randomGenerator.seed(self.zoneId) interior = self.randomDNAItem('TI_hall', 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']) 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() for npcToon in self.cr.doFindAllInstances( DistributedNPCToonBase.DistributedNPCToonBase): npcToon.initToonState() self.createSillyMeter()
def setup(self): self.dnaStore = base.cr.playGame.dnaStore self.randomGenerator = random.Random() self.randomGenerator.seed(self.zoneId) interior = self.randomDNAItem('TI_hall', 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) del self.colors del self.dnaStore del self.randomGenerator self.interior.flattenMedium() self.sillyFSM.enterInitialState() for npcToon in self.cr.doFindAllInstances(DistributedNPCToonBase): npcToon.initToonState()
def updateMap(self): if self.av: try: hoodId = ZoneUtil.getCanonicalHoodId(self.av.getLocation()[1]) zoneId = ZoneUtil.getCanonicalBranchZone(self.av.getLocation()[1]) mapsGeom = loader.loadModel('phase_4/models/questmap/%s_maps' % ToontownGlobals.dnaMap[hoodId]) 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() self.stop()
def setup(self): self.dnaStore = base.cr.playGame.dnaStore self.randomGenerator = random.Random() self.randomGenerator.seed(self.zoneId) interior = self.randomDNAItem("TI_hall", 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) del self.colors del self.dnaStore del self.randomGenerator self.interior.flattenMedium() self.sillyFSM.enterInitialState()
def setup(self): self.dnaStore = base.cr.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.getCanonicalHoodId(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.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 replaceStreetSignTextures(self): if not hasattr(base.cr, "playGame"): return None place = base.cr.playGame.getPlace() if place is None: return None geom = base.cr.playGame.getPlace().loader.geom signs = geom.findAllMatches("**/*tunnelAheadSign*;+s") if signs.getNumPaths() > 0: streetSign = base.cr.streetSign signTexturePath = streetSign.StreetSignBaseDir + "/" + streetSign.StreetSignFileName loaderTexturePath = Filename(str(signTexturePath)) alphaPath = "phase_4/maps/tt_t_ara_gen_tunnelAheadSign_a.rgb" inDreamland = False if place.zoneId and ZoneUtil.getCanonicalHoodId(place.zoneId) == ToontownGlobals.DonaldsDreamland: inDreamland = True alphaPath = "phase_4/maps/tt_t_ara_gen_tunnelAheadSign_a.rgb" if Filename(signTexturePath).exists(): signTexture = loader.loadTexture(loaderTexturePath, alphaPath) for sign in signs: if Filename(signTexturePath).exists(): sign.setTexture(signTexture, 1) if inDreamland: sign.setColorScale(0.52500000000000002, 0.52500000000000002, 0.52500000000000002, 1) continue
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 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 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 calcHoodId(self, node): self.hoodId = ToontownGlobals.ToontownCentral fullString = str(node) splits = fullString.split('/') visId = int(splits[3]) self.visId = visId self.hoodId = ZoneUtil.getCanonicalHoodId(visId) self.notify.debug('calcHoodId %d from %s' % (self.hoodId, fullString))
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 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.80000000000000004, 0.80000000000000004, 0.80000000000000004) door_origin.setPos(door_origin, 0, -0.025000000000000001, 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('**/tb%s:*_landmark_*_DNARoot/**/sign;+s' % (self.block,)) if not sign.isEmpty(): signOrigin = self.interior.find('**/sign_origin;+s') newSignNP = sign.copyTo(signOrigin) newSignNP.setDepthWrite(1, 1) 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.10000000000000001, (SIGN_TOP + SIGN_BOTTOM) / 2.0 - zCenter * scale, 0.0, 0.0, 0.0, scale, scale, scale) trophyOrigin = self.interior.find('**/trophy_origin') trophy = self.buildTrophy() if trophy: trophy.reparentTo(trophyOrigin) del self.colors del self.dnaStore del self.randomGenerator self.interior.flattenMedium()
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 allowedToEnter(self): if base.cr.isPaid(): return True place = base.cr.playGame.getPlace() myHoodId = ZoneUtil.getCanonicalHoodId(place.zoneId) if hasattr(place, 'id'): myHoodId = place.id if myHoodId in (ToontownGlobals.ToontownCentral, ToontownGlobals.MyEstate, ToontownGlobals.GoofySpeedway, ToontownGlobals.Tutorial): return True return False
def calcHoodId(self, node): self.hoodId = ToontownGlobals.ToontownCentral fullString = str(node) splits = fullString.split('/') visId = int(splits[3]) self.visId = visId self.hoodId = ZoneUtil.getCanonicalHoodId(visId) self.notify.debug( 'calcHoodId %d from %s' % (self.hoodId, fullString))
def setup(self): self.dnaStore = base.cr.playGame.dnaStore # Set up random generator self.randomGenerator = random.Random() self.randomGenerator.seed(self.zoneId) self.interior = loader.loadModel( 'phase_4/models/modules/PetShopInterior') self.interior.reparentTo(render) # Fish swimming around behind the glass self.fish = Actor.Actor( 'phase_4/models/props/interiorfish-zero', { 'swim': 'phase_4/models/props/interiorfish-swim', }) self.fish.reparentTo(self.interior) # Give them a little bluish green color to make it seem like they # are behind the glass. The 0.8 alpha makes their fins a little # translucent which is kinda cool. self.fish.setColorScale(0.8, 0.9, 1, 0.8) # Reposition them just a bit to bring them down and behind the glass self.fish.setScale(0.8) self.fish.setPos(0, 6, -4) # Slow it down a bit! Geez! self.fish.setPlayRate(0.7, 'swim') self.fish.loop('swim') # Load a color dictionary for this hood: hoodId = ZoneUtil.getCanonicalHoodId(self.zoneId) self.colors = ToonInteriorColors.colors[hoodId] # Replace all the "random_xxx_" nodes: self.replaceRandomInModel(self.interior) # Pick a door model door = self.chooseDoor() # Find the door origins doorOrigin = render.find("**/door_origin;+s") doorNP = door.copyTo(doorOrigin) assert (not doorNP.isEmpty()) assert (not doorOrigin.isEmpty()) doorOrigin.setScale(0.8, 0.8, 0.8) doorOrigin.setPos(doorOrigin, 0, -0.25, 0) doorColor = self.randomGenerator.choice(self.colors["TI_door"]) 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 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 setup(self): self.dnaStore = base.cr.playGame.dnaStore self.randomGenerator = random.Random() self.randomGenerator.seed(self.zoneId) self.interior = loader.loadModel( 'phase_4/models/modules/ttc_bank_interior.bam') self.interior.reparentTo(render) self.vaultOpenSfx = loader.loadSfx( 'phase_4/audio/sfx/vault_door_open.ogg') self.vaultCloseSfx = loader.loadSfx( 'phase_4/audio/sfx/vault_door_close.ogg') hoodId = ZoneUtil.getCanonicalHoodId(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.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 room = render.find('**/vault_walls') minPoint, maxPoint = room.getTightBounds() offset = 1 # We want a slight offset maxPoint -= offset collBox = CollisionBox(minPoint, maxPoint) collBox.setTangible(0) collNode = CollisionNode(self.uniqueName('vaultBox')) collNode.setIntoCollideMask(BitMask32(1)) collNode.addSolid(collBox) self.collNodePath = render.attachNewNode(collNode) radius = ((maxPoint - minPoint) / 2).getZ() self.collNodePath.setPos(-11.2 + (offset / 2), 14 + radius + offset, 0) for npcToon in self.cr.doFindAllInstances(DistributedNPCToonBase): npcToon.initToonState() self.accept(self.uniqueName('entervaultBox'), self.__handleEnterVaultBox) self.accept(self.uniqueName('exitvaultBox'), self.__handleExitVaultBox)
def canWearSuit(avatarId, zoneId): canonicalZoneId = ZoneUtil.getCanonicalHoodId(zoneId) allowedSuitZones = [ToontownGlobals.LawbotHQ, ToontownGlobals.CashbotHQ, ToontownGlobals.SellbotHQ, ToontownGlobals.BossbotHQ] if canonicalZoneId in allowedSuitZones: return True if zoneId >= ToontownGlobals.DynamicZonesBegin: return True return False
def genDNAFileName(self, zoneId): canonicalZoneId = ZoneUtil.getCanonicalZoneId(zoneId) canonicalHoodId = ZoneUtil.getCanonicalHoodId(canonicalZoneId) hood = ToontownGlobals.dnaMap[canonicalHoodId] if canonicalHoodId == canonicalZoneId: canonicalZoneId = 'sz' phase = ToontownGlobals.phaseMap[canonicalHoodId] else: phase = ToontownGlobals.streetPhaseMap[canonicalHoodId] return 'phase_%s/dna/%s_%s.dna' % (phase, hood, canonicalZoneId)
def requestTeleport(self, hood, shardId): canonicalHoodId = ZoneUtil.getCanonicalHoodId(hood) try: place = base.cr.playGame.getPlace() except: try: place = base.cr.playGame.hood.loader.place except: place = base.cr.playGame.hood.place place.requestTeleport(canonicalHoodId, canonicalHoodId, shardId, -1)
def genDNAFileName(self, zoneId): zoneId = ZoneUtil.getCanonicalZoneId(zoneId) hoodId = ZoneUtil.getCanonicalHoodId(zoneId) hood = ToontownGlobals.dnaMap[hoodId] if hoodId == zoneId: zoneId = 'sz' phase = ToontownGlobals.phaseMap[hoodId] else: phase = ToontownGlobals.streetPhaseMap[hoodId] if 'outdoor_zone' in hood or 'golf_zone' in hood: phase = '6' return 'phase_%s/dna/%s_%s.dna' % (phase, hood, zoneId)
def canWearSuit(avatarId, zoneId): canonicalZoneId = ZoneUtil.getCanonicalHoodId(zoneId) allowedSuitZones = [ToontownGlobals.LawbotHQ, ToontownGlobals.CashbotHQ, ToontownGlobals.SellbotHQ, ToontownGlobals.BossbotHQ] if canonicalZoneId in allowedSuitZones: return True elif zoneId >= ToontownGlobals.DynamicZonesBegin: return True else: return False
def calcHoodId(self, node): self.hoodId = ToontownGlobals.ToontownCentral fullString = str(node) splits = fullString.split('/') if len(splits) >= 5: visId = int(splits[4]) self.visId = visId self.hoodId = ZoneUtil.getCanonicalHoodId(visId) self.notify.debug('calcHoodId %d from %s' % (self.hoodId, fullString)) else: self.notify.warning("calcHoodId couldn't parse %s using 0" % fullString) self.hoodId = 0 self.visId = 0
def genDNAFileName(self): zoneId = ZoneUtil.getCanonicalZoneId(self.getZoneId()) hoodId = ZoneUtil.getCanonicalHoodId(zoneId) hood = ToontownGlobals.dnaMap.get(hoodId) phase = ToontownGlobals.streetPhaseMap.get(hoodId, 4) if zoneId == 2000: phase = 4 if hoodId == zoneId: zoneId = 'sz' if not hood: hood = 'toontown_central' zoneId = 'sz' return 'phase_%s/dna/%s_%s.pdna' % (phase, hood, zoneId)
def calcHoodId(self, node): self.hoodId = ToontownGlobals.ToontownCentral fullString = str(node) splits = fullString.split('/') # Check if normal object or animated, if everything fails set the hoodId and visId to 0 try: if type(splits[2]) == int: visId = int(splits[2]) self.visId = visId self.hoodId = ZoneUtil.getCanonicalHoodId(visId) self.notify.debug('calcHoodId %d from %s' % (self.hoodId, fullString)) else: # Probably an animated prop... visId = int(splits[4]) self.visId = visId self.hoodId = ZoneUtil.getCanonicalHoodId(visId) except Exception, generic: if 'Editor' not in fullString: self.notify.warning("calcHoodId couldn't parse %s using 0" % fullString) self.hoodId = 0 self.visId = 0
def calcHoodId(self, node): self.hoodId = ToontownGlobals.ToontownCentral fullString = str(node) splits = fullString.split('/') try: visId = int(splits[2]) self.visId = visId self.hoodId = ZoneUtil.getCanonicalHoodId(visId) self.notify.debug('calcHoodId %d from %s' % (self.hoodId, fullString)) except Exception as generic: if 'Editor' not in fullString: self.notify.warning("calcHoodId couldn't parse %s using 0" % fullString) self.hoodId = 0 self.visId = 0
def teleportToShop(self, npcId): npcZone = NPCToons.getNPCZone(npcId) npcHood = ZoneUtil.getCanonicalHoodId(npcZone) avZone = base.localAvatar.getZoneId() avHood = ZoneUtil.getCanonicalHoodId(avZone) avShard = base.localAvatar.defaultShard avPlace = base.cr.playGame.getPlace() hqZone = {2000:2520, 1000:1507, 3000:3508, 4000:4504, 5000:5502, 7000:7503, 9000:9505} def callback(flag): if flag: npcZone = None base.cr.buildingQueryMgr.d_isSuit(npcZone, callback) if avShard not in base.cr.activeDistrictMap: return if npcZone in [-1, 0, None]: return if not ZoneUtil.isInterior(npcZone): return if ZoneUtil.isHQ(npcZone): args = (avHood, hqZone[avHood], avShard, -1) else: args = (npcHood, npcZone, avShard, -1) avPlace.requestTeleport(*args)