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 enterToon(self): self.d_setState("toon") (exteriorZoneId, interiorZoneId) = self.getExteriorAndInteriorZoneId() if simbase.config.GetBool("want-new-toonhall", 1) and ZoneUtil.getCanonicalZoneId(interiorZoneId) == ToonHall: self.interior = DistributedToonHallInteriorAI.DistributedToonHallInteriorAI( self.block, self.air, interiorZoneId, self ) else: self.interior = DistributedToonInteriorAI.DistributedToonInteriorAI( self.block, self.air, interiorZoneId, self ) self.interior.generateWithRequired(interiorZoneId) door = self.createExteriorDoor() insideDoor = DistributedDoorAI.DistributedDoorAI(self.air, self.block, DoorTypes.INT_STANDARD) door.setOtherDoor(insideDoor) insideDoor.setOtherDoor(door) door.zoneId = exteriorZoneId insideDoor.zoneId = interiorZoneId door.generateWithRequired(exteriorZoneId) insideDoor.generateWithRequired(interiorZoneId) self.door = door self.insideDoor = insideDoor self.becameSuitTime = 0 self.knockKnock = DistributedKnockKnockDoorAI.DistributedKnockKnockDoorAI(self.air, self.block) self.knockKnock.generateWithRequired(exteriorZoneId) self.air.writeServerEvent("building-toon", self.doId, "%s|%s" % (self.zoneId, self.block))
def requestBattle(self, zoneId, suit, toonId): self.notify.debug('requestBattle() - zone: %s suit: %s toon: %s' % (zoneId, suit.doId, toonId)) canonicalZoneId = ZoneUtil.getCanonicalZoneId(zoneId) if canonicalZoneId not in self.battlePosDict: return 0 toon = self.air.doId2do.get(toonId) if toon.getBattleId() > 0: self.notify.warning('We tried to request a battle when the toon was already in battle') return 0 if toon: if hasattr(toon, 'doId'): toon.b_setBattleId(toonId) pos = self.battlePosDict[canonicalZoneId] interactivePropTrackBonus = -1 if config.GetBool('props-buff-battles', True) and canonicalZoneId in self.cellToGagBonusDict: interactivePropTrackBonus = self.cellToGagBonusDict[canonicalZoneId] self.battleMgr.newBattle( zoneId, zoneId, pos, suit, toonId, self.__battleFinished, self.SuitHoodInfo[self.hoodInfoIdx][self.SUIT_HOOD_INFO_SMAX], interactivePropTrackBonus) for currOther in self.zoneInfo[zoneId]: self.notify.debug('Found suit %s in this new battle zone %s' % (currOther.getDoId(), zoneId)) if currOther != suit: if currOther.pathState == 1 and currOther.legType == SuitLeg.TWalk: self.checkForBattle(zoneId, currOther) return 1
def __init__(self, air, blockNumber, zoneId, trophyMgr): DistributedObjectAI.DistributedObjectAI.__init__(self, air) self.block = blockNumber self.zoneId = zoneId self.canonicalZoneId = ZoneUtil.getCanonicalZoneId(zoneId) self.trophyMgr = trophyMgr self.victorResponses = None self.fsm = ClassicFSM.ClassicFSM('DistributedBuildingAI', [State.State('off', self.enterOff, self.exitOff, ['waitForVictors', 'becomingToon', 'toon', 'clearOutToonInterior', 'becomingSuit', 'suit', 'clearOutToonInteriorForCogdo', 'becomingCogdo', 'cogdo']), State.State('waitForVictors', self.enterWaitForVictors, self.exitWaitForVictors, ['becomingToon']), State.State('waitForVictorsFromCogdo', self.enterWaitForVictorsFromCogdo, self.exitWaitForVictorsFromCogdo, ['becomingToonFromCogdo']), State.State('becomingToon', self.enterBecomingToon, self.exitBecomingToon, ['toon']), State.State('becomingToonFromCogdo', self.enterBecomingToonFromCogdo, self.exitBecomingToonFromCogdo, ['toon']), State.State('toon', self.enterToon, self.exitToon, ['clearOutToonInterior', 'clearOutToonInteriorForCogdo']), State.State('clearOutToonInterior', self.enterClearOutToonInterior, self.exitClearOutToonInterior, ['becomingSuit']), State.State('becomingSuit', self.enterBecomingSuit, self.exitBecomingSuit, ['suit']), State.State('suit', self.enterSuit, self.exitSuit, ['waitForVictors', 'becomingToon']), State.State('clearOutToonInteriorForCogdo', self.enterClearOutToonInteriorForCogdo, self.exitClearOutToonInteriorForCogdo, ['becomingCogdo']), State.State('becomingCogdo', self.enterBecomingCogdo, self.exitBecomingCogdo, ['cogdo']), State.State('cogdo', self.enterCogdo, self.exitCogdo, ['waitForVictorsFromCogdo', 'becomingToonFromCogdo'])], 'off', 'off') self.fsm.enterInitialState() self.track = 'c' self.difficulty = 1 self.numFloors = 0 self.savedBy = None self.becameSuitTime = 0 self.frontDoorPoint = None self.suitPlannerExt = None
def enterTeleport(self, shardId, hoodId, zoneId): teleportNotify.debug('enterTeleport%s' % ((shardId, hoodId, zoneId),)) hoodsVisited = base.localAvatar.hoodsVisited canonicalHoodId = ZoneUtil.getCanonicalZoneId(hoodId) if hoodId == ToontownGlobals.MyEstate: teleportNotify.debug('enterTeleport: estate') if shardId == base.localAvatar.defaultShard: shardId = None place = base.cr.playGame.getPlace() place.requestTeleport(hoodId, zoneId, shardId, self.avId) unloadTeleportPanel() elif canonicalHoodId not in hoodsVisited + ToontownGlobals.HoodsAlwaysVisited: teleportNotify.debug('enterTeleport: unknownHood') self.fsm.request('unknownHood', [ hoodId]) elif canonicalHoodId not in base.cr.hoodMgr.getAvailableZones(): print 'hoodId %d not ready' % hoodId self.fsm.request('unavailableHood', [ hoodId]) elif shardId == base.localAvatar.defaultShard: shardId = None teleportNotify.debug('enterTeleport: requesting teleport') place = base.cr.playGame.getPlace() place.requestTeleport(hoodId, zoneId, shardId, self.avId) unloadTeleportPanel()
def __init__(self, air, branchId, dnaStore, trophyMgr): self.air = air self.branchId = branchId self.canonicalBranchId = ZoneUtil.getCanonicalZoneId(self.branchId) self.dnaStore = dnaStore self.trophyMgr = trophyMgr self.__buildings = {} self.findAllLandmarkBuildings()
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 enterDFA(self, requestStatus): doneEvent = 'dfaDoneEvent' self.accept(doneEvent, self.enterDFACallback, [requestStatus]) self.dfa = DownloadForceAcknowledge.DownloadForceAcknowledge(doneEvent) hood = ZoneUtil.getCanonicalZoneId(requestStatus['hoodId']) if hood == ToontownGlobals.MyEstate: self.dfa.enter(base.cr.hoodMgr.getPhaseFromHood(ToontownGlobals.MyEstate)) else: self.dfa.enter(5)
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 createGameTables(self): self.gameTables = [] for zoneId in self.getZoneTable(): dnaData = self.air.dnaDataMap.get(zoneId, None) if dnaData.getName() == 'root': area = ZoneUtil.getCanonicalZoneId(zoneId) foundGameTables = self.findGameTables( dnaData, zoneId, area, overrideDNAZone=True) self.gameTables.extend(foundGameTables)
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 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 __init__(self, air, branchID, dnaStore, trophyMgr): self.branchID = branchID self.canonicalBranchID = ZoneUtil.getCanonicalZoneId(branchID) self.air = air self.__buildings = { } self.dnaStore = dnaStore self.trophyMgr = trophyMgr self.shard = str(air.districtId) self.backupExtension = '.bu' self.findAllLandmarkBuildings() self.doLaterTask = None
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 __init__(self, air, branchID, dnaStore, trophyMgr): self.branchID = branchID self.canonicalBranchID = ZoneUtil.getCanonicalZoneId(branchID) self.air = air self.__buildings = {} self.dnaStore = dnaStore self.trophyMgr = trophyMgr self.findAllLandmarkBuildings() self.doLaterTask = None self.air.buildingManagers[branchID] = self return
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 createPicnicTables(self): self.picnicTables = [] 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) foundPicnicTables = self.findPicnicTables( dnaData, zoneId, area, overrideDNAZone=True) self.picnicTables.extend(foundPicnicTables) for picnicTable in self.picnicTables: picnicTable.start()
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 createFishingPonds(self): self.fishingPonds = [] fishingPondGroups = [] for zoneId in self.getZoneTable(): dnaData = self.air.dnaDataMap.get(zoneId, None) if dnaData.getName() == 'root': area = ZoneUtil.getCanonicalZoneId(zoneId) (foundFishingPonds, foundFishingPondGroups) = self.findFishingPonds(dnaData, zoneId, area) self.fishingPonds.extend(foundFishingPonds) fishingPondGroups.extend(foundFishingPondGroups) for fishingPond in self.fishingPonds: NPCToons.createNpcsInZone(self.air, fishingPond.zoneId) fishingSpots = [] for (dnaGroup, fishingPond) in zip(fishingPondGroups, self.fishingPonds): fishingSpots.extend(self.findFishingSpots(dnaGroup, fishingPond))
def requestBattle(self, zoneId, suit, toonId): self.notify.debug("requestBattle() - zone: %d suit: %d toon: %d" % (zoneId, suit.doId, toonId)) canonicalZoneId = ZoneUtil.getCanonicalZoneId(zoneId) if not self.battlePosDict.has_key(canonicalZoneId): return 0 toon = self.air.doId2do.get(toonId) if toon.getBattleId() > 0: self.notify.warning("We tried to request a battle when the toon was already in battle") return 0 if toon: if hasattr(toon, "doId"): print("Setting toonID ", toonId) toon.b_setBattleId(toonId) pos = self.battlePosDict[canonicalZoneId] interactivePropTrackBonus = -1 if config.GetBool("props-buff-battles", False) and self.cellToGagBonusDict.has_key(canonicalZoneId): tentativeBonusTrack = self.cellToGagBonusDict[canonicalZoneId] trackToHolidayDict = { ToontownBattleGlobals.SQUIRT_TRACK: ToontownGlobals.HYDRANTS_BUFF_BATTLES, ToontownBattleGlobals.THROW_TRACK: ToontownGlobals.MAILBOXES_BUFF_BATTLES, ToontownBattleGlobals.HEAL_TRACK: ToontownGlobals.TRASHCANS_BUFF_BATTLES, } if tentativeBonusTrack in trackToHolidayDict: holidayId = trackToHolidayDict[tentativeBonusTrack] if ( simbase.air.holidayManager.isHolidayRunning(holidayId) and simbase.air.holidayManager.getCurPhase(holidayId) >= 1 ): interactivePropTrackBonus = tentativeBonusTrack self.battleMgr.newBattle( zoneId, zoneId, pos, suit, toonId, self.__battleFinished, self.SuitHoodInfo[self.hoodInfoIdx][self.SUIT_HOOD_INFO_SMAX], interactivePropTrackBonus, ) for currOther in self.zoneInfo[zoneId]: self.notify.debug("Found suit %d in this new battle zone %d" % (currOther.getDoId(), zoneId)) if currOther != suit: if currOther.pathState == 1 and currOther.legType == SuitLeg.TWalk: self.checkForBattle(zoneId, currOther) return 1
def createFishingPonds(self): self.fishingPonds = [] fishingPondGroups = [] 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) (foundFishingPonds, foundFishingPondGroups) = self.findFishingPonds(dnaData, zoneId, area) self.fishingPonds.extend(foundFishingPonds) fishingPondGroups.extend(foundFishingPondGroups) for fishingPond in self.fishingPonds: NPCToons.createNpcsInZone(self.air, fishingPond.zoneId) fishingSpots = [] for (dnaGroup, fishingPond) in zip(fishingPondGroups, self.fishingPonds): fishingSpots.extend(self.findFishingSpots(dnaGroup, fishingPond)) for fishingPond in self.fishingPonds: fishingPond.bingoMgr = DistributedPondBingoManagerAI(self.air) fishingPond.bingoMgr.setPondDoId(fishingPond.doId) fishingPond.bingoMgr.generateWithRequired(self.zoneId)
def moveToNextLeg(self, task): now = globalClock.getFrameTime() elapsed = now - self.pathStartTime nextLeg = self.legList.getLegIndexAtTime(elapsed, self.currentLeg) numLegs = self.legList.getNumLegs() if self.currentLeg != nextLeg: self.currentLeg = nextLeg self.__beginLegType(self.legList.getType(nextLeg)) zoneId = self.legList.getZoneId(nextLeg) zoneId = ZoneUtil.getTrueZoneId(zoneId, self.branchId) if zoneId: self.__enterZone(zoneId) self.notify.debug( 'Suit %s reached leg %s of %s in zone %s.' % (self.getDoId(), nextLeg, numLegs - 1, self.zoneId)) if self.DEBUG_SUIT_POSITIONS: leg = self.legList.getLeg(nextLeg) pos = leg.getPosAtTime(elapsed - leg.getStartTime()) self.d_debugSuitPosition(elapsed, nextLeg, pos[0], pos[1], now) if now - self.pathPositionTimestamp > self.UPDATE_TIMESTAMP_INTERVAL: self.resync() if self.pathState != 1: return Task.done nextLeg += 1 while nextLeg + 1 < numLegs and self.legList.getZoneId( nextLeg) == ZoneUtil.getCanonicalZoneId( self.zoneId) and self.legList.getType( nextLeg) == self.legType: nextLeg += 1 if nextLeg < numLegs: nextTime = self.legList.getStartTime(nextLeg) delay = nextTime - elapsed taskMgr.remove(self.taskName('move')) taskMgr.doMethodLater(delay, self.moveToNextLeg, self.taskName('move')) else: if simbase.config.GetBool('want-cogbuildings', True): self.startTakeOver() self.requestRemoval() return Task.done
def moveToNextLeg(self, task): now = globalClock.getFrameTime() elapsed = now - self.pathStartTime nextLeg = self.legList.getLegIndexAtTime(elapsed, self.currentLeg) numLegs = self.legList.getNumLegs() if self.currentLeg != nextLeg: if nextLeg >= numLegs: self.flyAwayNow() return Task.done self.currentLeg = nextLeg self.__beginLegType(self.legList.getType(nextLeg)) zoneId = self.legList.getZoneId(nextLeg) zoneId = ZoneUtil.getTrueZoneId(zoneId, self.branchId) if zoneId: self.__enterZone(zoneId) self.notify.debug('Suit %s reached leg %s of %s in zone %s.' % (self.getDoId(), nextLeg, numLegs - 1, self.zoneId)) if self.DEBUG_SUIT_POSITIONS: leg = self.legList.getLeg(nextLeg) pos = leg.getPosAtTime(elapsed - leg.getStartTime()) self.d_debugSuitPosition(elapsed, nextLeg, pos[0], pos[1], now) if now - self.pathPositionTimestamp > self.UPDATE_TIMESTAMP_INTERVAL: self.resync() if self.pathState != 1: return Task.done nextLeg += 1 while nextLeg + 1 < numLegs and self.legList.getZoneId(nextLeg) == ZoneUtil.getCanonicalZoneId(self.zoneId) and self.legList.getType(nextLeg) == self.legType: nextLeg += 1 if nextLeg < numLegs: nextTime = self.legList.getStartTime(nextLeg) delay = nextTime - elapsed taskMgr.remove(self.taskName('move')) taskMgr.doMethodLater(delay, self.moveToNextLeg, self.taskName('move')) else: if simbase.config.GetBool('want-cogbuildings', True): self.startTakeOver() self.requestRemoval() return Task.done
def enterToon(self): self.d_setState('toon') (exteriorZoneId, interiorZoneId) = self.getExteriorAndInteriorZoneId() if simbase.config.GetBool('want-new-toonhall', 1) and ZoneUtil.getCanonicalZoneId(interiorZoneId) == ToonHall: self.interior = DistributedToonHallInteriorAI.DistributedToonHallInteriorAI(self.block, self.air, interiorZoneId, self) else: self.interior = DistributedToonInteriorAI.DistributedToonInteriorAI(self.block, self.air, interiorZoneId, self) self.interior.generateWithRequired(interiorZoneId) door = self.createExteriorDoor() insideDoor = DistributedDoorAI.DistributedDoorAI(self.air, self.block, DoorTypes.INT_STANDARD) door.setOtherDoor(insideDoor) insideDoor.setOtherDoor(door) door.zoneId = exteriorZoneId insideDoor.zoneId = interiorZoneId door.generateWithRequired(exteriorZoneId) insideDoor.generateWithRequired(interiorZoneId) self.door = door self.insideDoor = insideDoor self.becameSuitTime = 0 self.knockKnock = DistributedKnockKnockDoorAI.DistributedKnockKnockDoorAI(self.air, self.block) self.knockKnock.generateWithRequired(exteriorZoneId)
def enterToon(self): assert(self.debugPrint("enterToon()")) self.d_setState('toon') # Create the DistributedDoor: exteriorZoneId, interiorZoneId=self.getExteriorAndInteriorZoneId() # Toon interior: if simbase.config.GetBool("want-new-toonhall",1) and \ ZoneUtil.getCanonicalZoneId(interiorZoneId)== ToonHall: self.interior=DistributedToonHallInteriorAI.DistributedToonHallInteriorAI( self.block, self.air, interiorZoneId, self) else: self.interior=DistributedToonInteriorAI.DistributedToonInteriorAI( self.block, self.air, interiorZoneId, self) self.interior.generateWithRequired(interiorZoneId) # Outside door: door=self.createExteriorDoor() # Inside of the same door (different zone, and different distributed object): insideDoor=DistributedDoorAI.DistributedDoorAI(self.air, self.block, DoorTypes.INT_STANDARD) # Tell them about each other: door.setOtherDoor(insideDoor) insideDoor.setOtherDoor(door) door.zoneId=exteriorZoneId insideDoor.zoneId=interiorZoneId # Now that they both now about each other, generate them: door.generateWithRequired(exteriorZoneId) insideDoor.generateWithRequired(interiorZoneId) # keep track of them: self.door=door self.insideDoor=insideDoor self.becameSuitTime = 0 self.knockKnock=DistributedKnockKnockDoorAI.DistributedKnockKnockDoorAI( self.air, self.block) self.knockKnock.generateWithRequired(exteriorZoneId) self.air.writeServerEvent( 'building-toon', self.doId, "%s|%s" % (self.zoneId, self.block))
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 enterTeleport(self, shardId, hoodId, zoneId): teleportNotify.debug('enterTeleport%s' % ((shardId, hoodId, zoneId), )) hoodsVisited = base.localAvatar.hoodsVisited canonicalHoodId = ZoneUtil.getCanonicalZoneId(hoodId) if hoodId == ToontownGlobals.MyEstate: if shardId == base.localAvatar.defaultShard: shardId = None place = base.cr.playGame.getPlace() place.requestTeleport(hoodId, zoneId, shardId, self.avId) unloadTeleportPanel() elif canonicalHoodId not in hoodsVisited + ToontownGlobals.HoodsAlwaysVisited: self.fsm.request('unknownHood', [hoodId]) elif canonicalHoodId not in base.cr.hoodMgr.getAvailableZones(): print 'hoodId %d not ready' % hoodId self.fsm.request('unavailableHood', [hoodId]) elif shardId == base.localAvatar.defaultShard: shardId = None place = base.cr.playGame.getPlace() place.requestTeleport(hoodId, zoneId, shardId, self.avId) unloadTeleportPanel()
def enterTeleport(self, shardId, hoodId, zoneId): hoodsVisited = base.localAvatar.hoodsVisited canonicalHoodId = ZoneUtil.getCanonicalZoneId(hoodId) if hoodId == ToontownGlobals.MyEstate: if shardId == base.localAvatar.defaultShard: # If we're staying on the same shard, don't make the # shardId part of the request. shardId = None place = base.cr.playGame.getPlace() place.requestTeleport(hoodId, zoneId, shardId, self.avId) unloadTeleportPanel() elif canonicalHoodId not in (hoodsVisited + ToontownGlobals.HoodsAlwaysVisited): # We've never been to this hood before, so we can't go # there now. self.fsm.request('unknownHood', [hoodId]) elif canonicalHoodId not in base.cr.hoodMgr.getAvailableZones(): print("hoodId %d not ready" % hoodId) # We haven't finished downloading this hood yet. self.fsm.request('unavailableHood', [hoodId]) else: # All right already, just go there. if shardId == base.localAvatar.defaultShard: # If we're staying on the same shard, don't make the # shardId part of the request. shardId = None # All right already, just go there. place = base.cr.playGame.getPlace() place.requestTeleport(hoodId, zoneId, shardId, self.avId) unloadTeleportPanel() return
def enterToon(self): self.d_setState('toon') exteriorZoneId, interiorZoneId = self.getExteriorAndInteriorZoneId() if simbase.config.GetBool( 'want-new-toonhall', 1) and ZoneUtil.getCanonicalZoneId(interiorZoneId) == ToonHall: self.interior = DistributedToonHallInteriorAI.DistributedToonHallInteriorAI( self.block, self.air, interiorZoneId, self) elif ZoneUtil.getCanonicalZoneId(interiorZoneId) == Kongdominium: self.interior = DistributedKongToonInteriorAI.DistributedKongToonInteriorAI( self.block, self.air, interiorZoneId, self) elif ZoneUtil.getCanonicalZoneId(interiorZoneId) == Pizzeria: self.interior = DistributedPizzeriaInteriorAI.DistributedPizzeriaInteriorAI( self.block, self.air, interiorZoneId, self) elif ZoneUtil.getCanonicalZoneId(interiorZoneId) == ToonyLab: self.interior = DistributedToonyLabInteriorAI.DistributedToonyLabInteriorAI( self.block, self.air, interiorZoneId, self) elif ZoneUtil.getCanonicalZoneId(interiorZoneId) == PrivateServerCafe: self.interior = DistributedPrivateServerCafeInteriorAI.DistributedPrivateServerCafeInteriorAI( self.block, self.air, interiorZoneId, self) elif ZoneUtil.getCanonicalZoneId(interiorZoneId) == GyrosLab: self.interior = DistributedGyrosLabInteriorAI.DistributedGyrosLabInteriorAI( self.block, self.air, interiorZoneId, self) else: self.interior = DistributedToonInteriorAI.DistributedToonInteriorAI( self.block, self.air, interiorZoneId, self) self.interior.generateWithRequired(interiorZoneId) door = self.createExteriorDoor() insideDoor = DistributedDoorAI.DistributedDoorAI( self.air, self.block, DoorTypes.INT_STANDARD) door.setOtherDoor(insideDoor) insideDoor.setOtherDoor(door) door.zoneId = exteriorZoneId insideDoor.zoneId = interiorZoneId door.generateWithRequired(exteriorZoneId) insideDoor.generateWithRequired(interiorZoneId) self.door = door self.insideDoor = insideDoor self.becameSuitTime = 0 self.knockKnock = DistributedKnockKnockDoorAI.DistributedKnockKnockDoorAI( self.air, self.block) self.knockKnock.generateWithRequired(exteriorZoneId) self.air.writeServerEvent('building-toon', self.doId, '%s|%s' % (self.zoneId, self.block))
def enterTeleport(self, shardId, hoodId, zoneId): shardName = base.cr.getShardName(shardId) if shardName is None: shardName = 'unknown' hoodsVisited = base.localAvatar.hoodsVisited canonicalHoodId = ZoneUtil.getCanonicalZoneId(hoodId) if hoodId == ToontownGlobals.MyEstate: teleportNotify.debug('enterTeleport: estate') if shardId == base.localAvatar.defaultShard: shardId = None place = base.cr.playGame.getPlace() place.requestTeleport(hoodId, zoneId, shardId, self.avId) unloadTeleportPanel() elif canonicalHoodId not in hoodsVisited + ToontownGlobals.HoodsAlwaysVisited: teleportNotify.debug('enterTeleport: unknownHood') self.fsm.request('unknownHood', [hoodId]) else: if shardId == base.localAvatar.defaultShard: shardId = None teleportNotify.debug('enterTeleport: requesting teleport') place = base.cr.playGame.getPlace() place.requestTeleport(hoodId, zoneId, shardId, self.avId) unloadTeleportPanel() return
def requestBattle(self, zoneId, suit, toonId): self.notify.debug('requestBattle() - zone: %s suit: %s toon: %s' % (zoneId, suit.doId, toonId)) canonicalZoneId = ZoneUtil.getCanonicalZoneId(zoneId) if canonicalZoneId not in self.battlePosDict: return 0 toon = self.air.doId2do.get(toonId) if toon.getBattleId() > 0: self.notify.warning('We tried to request a battle when the toon was already in battle') return 0 if toon: if hasattr(toon, 'doId'): toon.b_setBattleId(toonId) pos = self.battlePosDict[canonicalZoneId] interactivePropTrackBonus = -1 self.battleMgr.newBattle( zoneId, zoneId, pos, suit, toonId, self.__battleFinished, self.SuitHoodInfo[self.hoodInfoIdx][self.SUIT_HOOD_INFO_SMAX], interactivePropTrackBonus) for currOther in self.zoneInfo[zoneId]: self.notify.debug('Found suit %s in this new battle zone %s' % (currOther.getDoId(), zoneId)) if currOther != suit: if currOther.pathState == 1 and currOther.legType == SuitLeg.TWalk: self.checkForBattle(zoneId, currOther) return 1
def __init__(self, air, blockNumber, zoneId, trophyMgr): DistributedObjectAI.DistributedObjectAI.__init__(self, air) self.block = blockNumber self.zoneId = zoneId self.canonicalZoneId = ZoneUtil.getCanonicalZoneId(zoneId) self.trophyMgr = trophyMgr self.victorResponses = None self.fsm = ClassicFSM.ClassicFSM('DistributedBuildingAI', [State.State('off', self.enterOff, self.exitOff, ['waitForVictors', 'becomingToon', 'toon', 'clearOutToonInterior', 'becomingSuit', 'suit', 'clearOutToonInteriorForCogdo', 'becomingCogdo', 'cogdo']), State.State('waitForVictors', self.enterWaitForVictors, self.exitWaitForVictors, ['becomingToon']), State.State('waitForVictorsFromCogdo', self.enterWaitForVictorsFromCogdo, self.exitWaitForVictorsFromCogdo, ['becomingToonFromCogdo']), State.State('becomingToon', self.enterBecomingToon, self.exitBecomingToon, ['toon']), State.State('becomingToonFromCogdo', self.enterBecomingToonFromCogdo, self.exitBecomingToonFromCogdo, ['toon']), State.State('toon', self.enterToon, self.exitToon, ['clearOutToonInterior', 'clearOutToonInteriorForCogdo']), State.State('clearOutToonInterior', self.enterClearOutToonInterior, self.exitClearOutToonInterior, ['becomingSuit']), State.State('becomingSuit', self.enterBecomingSuit, self.exitBecomingSuit, ['suit']), State.State('suit', self.enterSuit, self.exitSuit, ['waitForVictors', 'becomingToon']), State.State('clearOutToonInteriorForCogdo', self.enterClearOutToonInteriorForCogdo, self.exitClearOutToonInteriorForCogdo, ['becomingCogdo']), State.State('becomingCogdo', self.enterBecomingCogdo, self.exitBecomingCogdo, ['cogdo']), State.State('cogdo', self.enterCogdo, self.exitCogdo, ['waitForVictorsFromCogdo', 'becomingToonFromCogdo'])], 'off', 'off') self.fsm.enterInitialState() self.track = 'c' self.difficulty = 1 self.numFloors = 0 self.savedBy = None self.becameSuitTime = 0 self.frontDoorPoint = None self.suitPlannerExt = None return
def enterTeleport(self, shardId, hoodId, zoneId): shardName = base.cr.getShardName(shardId) if shardName is None: shardName = 'unknown' hoodsVisited = base.localAvatar.hoodsVisited canonicalHoodId = ZoneUtil.getCanonicalZoneId(hoodId) if hoodId == ToontownGlobals.MyEstate: teleportNotify.debug('enterTeleport: estate') if shardId == base.localAvatar.defaultShard: shardId = None place = base.cr.playGame.getPlace() place.requestTeleport(hoodId, zoneId, shardId, self.avId) unloadTeleportPanel() elif canonicalHoodId not in hoodsVisited + ToontownGlobals.HoodsAlwaysVisited: teleportNotify.debug('enterTeleport: unknownHood') self.fsm.request('unknownHood', [hoodId]) else: if shardId == base.localAvatar.defaultShard: shardId = None teleportNotify.debug('enterTeleport: requesting teleport') place = base.cr.playGame.getPlace() place.requestTeleport(hoodId, zoneId, shardId, self.avId) unloadTeleportPanel() return
def getFullnameFromId(self, hoodId): hoodId = ZoneUtil.getCanonicalZoneId(hoodId) return ToontownGlobals.hoodNameMap[hoodId][-1]
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 getFullnameFromId(self, hoodId): hoodId = ZoneUtil.getCanonicalZoneId(hoodId) return ToontownGlobals.hoodNameMap[hoodId][-1]
def __init__(self, air, blockNumber, zoneId, trophyMgr): """blockNumber: the landmark building number (from the name)""" DistributedObjectAI.DistributedObjectAI.__init__(self, air) self.block = blockNumber assert (self.debugPrint("DistributedBuildingAI(%s, %s)" % ("the air", str(blockNumber)))) self.zoneId = zoneId self.canonicalZoneId = ZoneUtil.getCanonicalZoneId(zoneId) self.trophyMgr = trophyMgr self.victorResponses = None self.fsm = ClassicFSM.ClassicFSM( 'DistributedBuildingAI', [ State.State('off', self.enterOff, self.exitOff, [ 'waitForVictors', 'becomingToon', 'toon', 'clearOutToonInterior', 'becomingSuit', 'suit', 'clearOutToonInteriorForCogdo', 'becomingCogdo', 'becomingCogdoFromCogdo' 'cogdo', ]), State.State('waitForVictors', self.enterWaitForVictors, self.exitWaitForVictors, [ 'becomingToon', ]), State.State( 'waitForVictorsFromCogdo', self.enterWaitForVictorsFromCogdo, self.exitWaitForVictorsFromCogdo, ['becomingToonFromCogdo', 'becomingCogdoFromCogdo']), State.State('becomingToon', self.enterBecomingToon, self.exitBecomingToon, ['toon']), State.State('becomingToonFromCogdo', self.enterBecomingToonFromCogdo, self.exitBecomingToonFromCogdo, ['toon']), State.State( 'toon', self.enterToon, self.exitToon, ['clearOutToonInterior', 'clearOutToonInteriorForCogdo']), State.State('clearOutToonInterior', self.enterClearOutToonInterior, self.exitClearOutToonInterior, ['becomingSuit']), State.State('becomingSuit', self.enterBecomingSuit, self.exitBecomingSuit, ['suit']), State.State( 'suit', self.enterSuit, self.exitSuit, [ 'waitForVictors', 'becomingToon', # debug only ]), State.State('clearOutToonInteriorForCogdo', self.enterClearOutToonInteriorForCogdo, self.exitClearOutToonInteriorForCogdo, ['becomingCogdo']), State.State('becomingCogdo', self.enterBecomingCogdo, self.exitBecomingCogdo, ['cogdo']), State.State('becomingCogdoFromCogdo', self.enterBecomingCogdoFromCogdo, self.exitBecomingCogdoFromCogdo, ['cogdo']), State.State( 'cogdo', self.enterCogdo, self.exitCogdo, [ 'waitForVictorsFromCogdo', 'becomingToonFromCogdo', # debug only ]) ], # Initial State 'off', # Final State 'off', ) self.fsm.enterInitialState() self.track = 'c' self.difficulty = 1 self.numFloors = 0 self.savedBy = None self.becameSuitTime = 0 self.frontDoorPoint = None self.suitPlannerExt = None
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 announceGenerate(self): canonicalZoneId = ZoneUtil.getCanonicalZoneId(self.zoneId) self.notify.debug('canonicalZoneId = %s' % canonicalZoneId) localAvatar.chatMgr.chatInputSpeedChat.addBoardingGroupMenu(canonicalZoneId) if base.config.GetBool('want-singing', 0): localAvatar.chatMgr.chatInputSpeedChat.addSingingGroupMenu()
def handleWaitForSetZoneResponse(self, requestStatus): assert ( self.notify.debug("handleWaitForSetZoneResponse(requestStatus=" + str(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) # Better be conservative; some senders don't set this. ownerId = requestStatus.get("ownerId", avId) # ditto # Get the loading bar count count = ToontownGlobals.hoodCountMap[canonicalHoodId] if loaderName == "safeZoneLoader": count += ToontownGlobals.safeZoneCountMap[canonicalHoodId] elif loaderName == "townLoader": count += ToontownGlobals.townCountMap[canonicalHoodId] else: assert (self.notify.debug(" unknown loaderName=" + loaderName)) if not loader.inBulkBlock: if hoodId == ToontownGlobals.MyEstate: if avId == -1: # we are going to our own estate loader.beginBulkLoad("hood", TTLocalizer.HeadingToYourEstate, count, 1, TTLocalizer.TIP_ESTATE) else: # we are going to someone elses estate, find owners name owner = base.cr.identifyAvatar(ownerId) if (owner == None): # we aren't friends with the owner, get name of avId we are visiting 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 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) loader.endBulkLoad("hood")
def announceGenerate(self): canonicalZoneId = ZoneUtil.getCanonicalZoneId(self.zoneId) self.notify.debug('canonicalZoneId = %s' % canonicalZoneId) localAvatar.chatMgr.chatInputSpeedChat.addBoardingGroupMenu(canonicalZoneId) if base.config.GetBool('want-singing', 0): localAvatar.chatMgr.chatInputSpeedChat.addSingingGroupMenu()
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 config.GetBool("want-cogdos", False): if not hasattr(self.__class__, "CogdoPopAdjusted"): self.__class__.CogdoPopAdjusted = True for index in xrange(len(self.SuitHoodInfo)): hoodInfo = self.SuitHoodInfo[index] hoodInfo[self.SUIT_HOOD_INFO_BMIN] = int( 0.5 + self.CogdoPopFactor * hoodInfo[self.SUIT_HOOD_INFO_BMIN] ) hoodInfo[self.SUIT_HOOD_INFO_BMAX] = int( 0.5 + self.CogdoPopFactor * hoodInfo[self.SUIT_HOOD_INFO_BMAX] ) 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 = self.SuitHoodInfo[self.hoodInfoIdx][self.SUIT_HOOD_INFO_BMIN] 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.initBuildingsAndPoints() numSuits = config.GetInt("suit-count", -1) if numSuits >= 0: self.currDesired = numSuits suitHood = 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 self.air.suitPlanners[zoneId] = self return
def announceGenerate(self): canonicalZoneId = ZoneUtil.getCanonicalZoneId(self.zoneId) self.notify.debug('canonicalZoneId = %s' % canonicalZoneId) localAvatar.chatMgr.chatInputSpeedChat.addBoardingGroupMenu(canonicalZoneId)
def handleLeftQuietZone(self): status = self.quietZoneStateData.getRequestStatus() hoodId = ZoneUtil.getCanonicalZoneId(status['hoodId']) hoodState = self.getHoodStateByNumber(hoodId) self.fsm.request(hoodState, [status])
def handleLeftQuietZone(self): status = self.quietZoneStateData.getRequestStatus() hoodId = ZoneUtil.getCanonicalZoneId(status['hoodId']) hoodState = self.getHoodStateByNumber(hoodId) self.fsm.request(hoodState, [ status])
def handleQuietZoneDone(self): assert (self.notify.debug("handleQuietZoneDone()")) status = self.quietZoneStateData.getRequestStatus() hoodId = ZoneUtil.getCanonicalZoneId(status["hoodId"]) hoodState = self.getHoodStateByNumber(hoodId) self.fsm.request(hoodState, [status])
def moveToNextLeg(self, task): """ This callback function is spawned by a do-later task as each leg ETA is reached. It handles moving the suit to the next leg, and all the bookkeeping that goes along with that. """ # First, which leg have we reached, anyway? now = globalClock.getFrameTime() elapsed = now - self.pathStartTime nextLeg = self.legList.getLegIndexAtTime(elapsed, self.currentLeg) numLegs = self.legList.getNumLegs() if self.currentLeg != nextLeg: self.currentLeg = nextLeg self.__beginLegType(self.legList.getType(nextLeg)) zoneId = self.legList.getZoneId(nextLeg) zoneId = ZoneUtil.getTrueZoneId(zoneId, self.branchId) self.__enterZone(zoneId) self.notify.debug( "Suit %d reached leg %d of %d in zone %d." % (self.getDoId(), nextLeg, numLegs - 1, self.zoneId)) if self.DEBUG_SUIT_POSITIONS: leg = self.legList.getLeg(nextLeg) pos = leg.getPosAtTime(elapsed - leg.getStartTime()) self.d_debugSuitPosition(elapsed, nextLeg, pos[0], pos[1], now) # Also, make sure our position timestamp doesn't go stale. # Every now and then, send an updated timestamp. if now - self.pathPositionTimestamp > self.UPDATE_TIMESTAMP_INTERVAL: self.resync() if self.pathState != 1: # If we're not even in path mode, don't wait for the next zone. return Task.done # Now, which leg should we next wake up for? Unlike the # client code, the AI doesn't really care about stopping for # every silly leg. We only need to know about the next leg in # which our zoneId or type changes. nextLeg += 1 while nextLeg + 1 < numLegs and \ self.legList.getZoneId(nextLeg) == ZoneUtil.getCanonicalZoneId(self.zoneId) and \ self.legList.getType(nextLeg) == self.legType: nextLeg += 1 # Spawn another do-later to get to the next leg. if nextLeg < numLegs: nextTime = self.legList.getStartTime(nextLeg) delay = nextTime - elapsed taskMgr.remove(self.taskName("move")) taskMgr.doMethodLater(delay, self.moveToNextLeg, self.taskName("move")) else: # No more legs. By now the suit has gone--flown away # or inside a building. if self.attemptingTakeover: # We made it inside our building! self.startTakeOver() #self.notify.debug("Suit %s finished walk to building" % (self.doId)) self.requestRemoval() return Task.done
def handleWaitForSetZoneResponse(self, requestStatus): hoodId = requestStatus['hoodId'] canonicalHoodId = ZoneUtil.getCanonicalZoneId(hoodId) toHoodPhrase = ToontownGlobals.hoodNameMap[canonicalHoodId][0] hoodName = ToontownGlobals.hoodNameMap[canonicalHoodId][-1] zoneId = requestStatus['zoneId'] requestStatus['loader'] = 'cogHQLoader' if ZoneUtil.isCogHQZone( hoodId) else requestStatus['loader'] 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 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 announceGenerate(self): canonicalZoneId = ZoneUtil.getCanonicalZoneId(self.zoneId) self.notify.debug('canonicalZoneId = %s' % canonicalZoneId) localAvatar.chatMgr.chatInputSpeedChat.addBoardingGroupMenu( canonicalZoneId)
def getFullnameFromId(self, hoodId): assert (self.notify.debug("getFullnameFromId()")) hoodId = ZoneUtil.getCanonicalZoneId(hoodId) return ToontownGlobals.hoodNameMap[hoodId][-1]