def goToPartyFailed(self, reason): self.notify.debug("goToPartyFailed") failedToVisitAvId = self.doneStatus.get("avId") message = base.cr.partyManager.getGoToPartyFailedMessage(reason) self.notify.debug("goToPartyFailed, why =: %s" % message) # ignore the gotLocalPartyZone message # Isn't this redudant? it's only doing an acceptOnce self.ignore("gotLocalPartyZone") # TODO-parties: If we came here from a party, then make sure to send me back to that party. 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 goHomeFailed(self, task): self.notify.debug("goHomeFailed") failedToVisitAvId = self.doneStatus.get("avId") # disallow transitive friends if failedToVisitAvId > 0: message = TTLocalizer.EstateTeleportFailedNotFriends % base.cr.identifyAvatar( failedToVisitAvId).getName() else: message = TTLocalizer.EstateTeleportFailed self.notify.debug("goHomeFailed, why =: %s" % message) # ignore the setLocalEstateZone 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 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 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 enter(self, hoodId, zoneId, avId): Discord.setZone(zoneId) 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 }]) Discord.setZone(zoneId) return
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 handleStageWinEvent(self): """this handler is called when the stage has been defeated""" StageInterior.notify.debug('handleStageWinEvent') # if we're in the process of dying, ignore this if (base.cr.playGame.getPlace().fsm.getCurrentState().getName() == 'died'): return # update our flag self.stageDefeated = 1 if 1: # go back to HQ zoneId = ZoneUtil.getHoodId(self.zoneId) else: # go back to the playground 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): """enter(self) You will only get this case if you came from outside this shard This means login, or switching shards avId is the avatar to teleport to, or -1 to put you at the safezone. """ if hoodId == ToontownGlobals.Tutorial: loaderName = "townLoader" whereName = "toonInterior" elif hoodId == ToontownGlobals.MyEstate: # we just switched shards. The zoneId we have right now is the zoneId # we will be going to. But we still need to call # getEstateZone on the AI again, so the AI can do it's bookkeeping # on the estate. self.getEstateZoneAndGoHome(avId, zoneId) return elif hoodId == ToontownGlobals.PartyHood: # We just switched to the Party shard. We need to check if the party # exists and create it if necessary through getPartyZoneAndGoToParty: 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 }])
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 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 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 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 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}])
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}])
def handleCountryClubWinEvent(self): CountryClubInterior.notify.debug('handleCountryClubWinEvent') if base.cr.playGame.getPlace().fsm.getCurrentState().getName() == 'died': return self.CountryClubDefeated = 1 zoneId = ZoneUtil.getHoodId(self.zoneId) self.fsm.request('teleportOut', [{'loader': ZoneUtil.getLoaderName(zoneId), 'where': ZoneUtil.getToonWhereName(zoneId), 'how': 'teleportIn', 'hoodId': zoneId, 'zoneId': zoneId, 'shardId': None, 'avId': -1}])
def kickToonsOut(self): #print"TOONS BEING KICKED OUT" 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, }])
def forcedExit(self, avId): # This should only be sent to us if the timer expired on the # elevator before we boarded. assert(base.localAvatar.getDoId() == avId) # Teleport to the last safe zone visited. 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)
def handleMintWinEvent(self): MintInterior.notify.debug('handleMintWinEvent') if base.cr.playGame.getPlace().fsm.getCurrentState().getName() == 'died': return self.mintDefeated = 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 handleFactoryWinEvent(self): FactoryInterior.notify.info('handleFactoryWinEvent') if base.cr.playGame.getPlace().fsm.getCurrentState().getName() == 'died': return else: self.factoryDefeated = 1 zoneId = ZoneUtil.getHoodId(self.zoneId) self.fsm.request('teleportOut', [ {'loader': ZoneUtil.getLoaderName(zoneId), 'where': ZoneUtil.getToonWhereName(zoneId), 'how': 'teleportIn', 'hoodId': zoneId, 'zoneId': zoneId, 'shardId': None, 'avId': -1}]) return
def goToPartyFailed(self, reason): self.notify.debug('goToPartyFailed') failedToVisitAvId = self.doneStatus.get('avId') message = base.cr.partyManager.getGoToPartyFailedMessage(reason) self.notify.debug('goToPartyFailed, why =: %s' % message) self.ignore('gotLocalPartyZone') 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 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, )
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 enterTunnelOut(self, requestStatus): hoodId = requestStatus['hoodId'] zoneId = requestStatus['zoneId'] how = requestStatus['how'] tunnelOrigin = requestStatus['tunnelOrigin'] fromZoneId = ZoneUtil.getCanonicalZoneId(self.getZoneId()) tunnelName = requestStatus.get('tunnelName') if tunnelName == None: tunnelName = base.cr.hoodMgr.makeLinkTunnelName(self.loader.hood.id, fromZoneId) self.doneStatus = {'loader': ZoneUtil.getLoaderName(zoneId), 'where': ZoneUtil.getToonWhereName(zoneId), 'how': how, 'hoodId': hoodId, 'zoneId': zoneId, 'shardId': None, 'tunnelName': tunnelName} self.accept('tunnelOutMovieDone', self.__tunnelOutMovieDone) base.localAvatar.tunnelOut(tunnelOrigin) base.localAvatar.stopQuestMap()
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 teleportToBankInterior(self): hoodId = ZoneUtil.getTrueZoneId(21000, 21000) zoneId = ZoneUtil.getTrueZoneId(21401, 21000) how = 'teleportIn' tunnelOriginPlaceHolder = render.attachNewNode('toph_21000_21401') tutorialFlag = 0 requestStatus = { 'loader': ZoneUtil.getLoaderName(zoneId), 'where': ZoneUtil.getToonWhereName(zoneId), 'how': how, 'hoodId': hoodId, 'zoneId': zoneId, 'shardId': None, 'tunnelOrigin': tunnelOriginPlaceHolder, 'tutorial': tutorialFlag, 'avId': -1 } place = base.cr.playGame.getPlace() if place: place.requestLeave(requestStatus) return
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 bathroomTeleport(self): self.stallNodeBase.removeNode() hoodId = ZoneUtil.getTrueZoneId(12000, 12000) zoneId = ZoneUtil.getTrueZoneId(12210, 12000) how = 'teleportIn' tunnelOriginPlaceHolder = render.attachNewNode('toph_12000_12210') tutorialFlag = 0 requestStatus = { 'loader': ZoneUtil.getLoaderName(zoneId), 'where': ZoneUtil.getToonWhereName(zoneId), 'how': how, 'hoodId': hoodId, 'zoneId': zoneId, 'shardId': None, 'tunnelOrigin': tunnelOriginPlaceHolder, 'tutorial': tutorialFlag, 'avId': -1 } place = base.cr.playGame.getPlace() if place: place.requestLeave(requestStatus) return
def goToPartyFailed(self, reason): self.notify.debug("goToPartyFailed") failedToVisitAvId = self.doneStatus.get("avId") message = base.cr.partyManager.getGoToPartyFailedMessage(reason) self.notify.debug("goToPartyFailed, why =: %s" % message) self.ignore("gotLocalPartyZone") 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 addLinkTunnelHooks(self, hoodPart, nodeList, currentZoneId): assert (self.notify.debug("addLinkTunnelHooks()")) # hoodPart should be a SafeZone or a Town # Examine each vis group for tunnels # Return a list of the tunnelOriginPlaceHolders so the # caller can remove them when he is done with them tunnelOriginList = [] for i in nodeList: linkTunnelNPC = i.findAllMatches("**/linktunnel*") for p in range(linkTunnelNPC.getNumPaths()): linkTunnel = linkTunnelNPC.getPath(p) name = linkTunnel.getName() # Assuming a name like: "linktunnel_mm_3456_DNARoot" nameParts = name.split("_") # Name parts will be something like ['linktunnel', 'mm', '3456', 'DNARoot'] hoodStr = nameParts[1] zoneStr = nameParts[2] hoodId = self.getIdFromName(hoodStr) zoneId = int(zoneStr) hoodId = ZoneUtil.getTrueZoneId(hoodId, currentZoneId) zoneId = ZoneUtil.getTrueZoneId(zoneId, currentZoneId) # Get the actual collision sphere node linkSphere = linkTunnel.find("**/tunnel_trigger") # HACK: until cog tunnel trigger is renamed if linkSphere.isEmpty(): linkSphere = linkTunnel.find("**/tunnel_sphere") if not linkSphere.isEmpty(): # ...first time through this geometry. # Rename it to make it unique cnode = linkSphere.node() cnode.setName("tunnel_trigger_" + hoodStr + "_" + zoneStr) # It should be collidable to ghosts too cnode.setCollideMask(ToontownGlobals.WallBitmask | ToontownGlobals.GhostBitmask) else: # ...we've been through this already (i.e. we may have # gone into a building and then went out again). linkSphere = linkTunnel.find("**/tunnel_trigger_" + hoodStr + "_" + zoneStr) if linkSphere.isEmpty(): self.notify.error("tunnel_trigger not found") # Get the actual tunnel_origin tunnelOrigin = linkTunnel.find("**/tunnel_origin") if tunnelOrigin.isEmpty(): self.notify.error("tunnel_origin not found") # Create a place holder node tunnelOriginPlaceHolder = render.attachNewNode('toph_' + hoodStr + '_' + zoneStr) tunnelOriginList.append(tunnelOriginPlaceHolder) # Set the pos and hpr of the place holder tunnelOriginPlaceHolder.setPos(tunnelOrigin.getPos(render)) tunnelOriginPlaceHolder.setHpr(tunnelOrigin.getHpr(render)) # Determine based on hood id and zone id which hood and which # branch or safe zone to go to. Add a hook so that when the avatar # enters the tunnel, we are informed which hood it goes to and which zone hood = base.localAvatar.cr.playGame.hood # If we are in the tutorial, we will want to # teleport into the safe zone. Otherwise, we will # want to tunnel in. 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