Esempio n. 1
0
 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)
Esempio n. 2
0
 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()
Esempio n. 7
0
 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')
Esempio n. 9
0
 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)
Esempio n. 10
0
 def createGameTables(self):
     self.gameTables = []
     for zoneId in self.getZoneTable():
         dnaData = self.air.dnaDataMap.get(zoneId, None)
         zoneId = ZoneUtil.getTrueZoneId(zoneId, self.zoneId)
         if isinstance(dnaData, DNAData):
             area = ZoneUtil.getCanonicalZoneId(zoneId)
             foundGameTables = self.findGameTables(dnaData, zoneId, area, overrideDNAZone=True)
             self.gameTables.extend(foundGameTables)
Esempio n. 11
0
 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
Esempio n. 15
0
 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()
Esempio n. 18
0
 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)
Esempio n. 20
0
 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
Esempio n. 25
0
 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))
Esempio n. 27
0
 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()
Esempio n. 28
0
    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()
Esempio n. 29
0
    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
Esempio n. 30
0
 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
Esempio n. 35
0
 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
Esempio n. 37
0
 def getFullnameFromId(self, hoodId):
     hoodId = ZoneUtil.getCanonicalZoneId(hoodId)
     return ToontownGlobals.hoodNameMap[hoodId][-1]
Esempio n. 38
0
 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()
Esempio n. 41
0
    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)
Esempio n. 45
0
 def handleLeftQuietZone(self):
     status = self.quietZoneStateData.getRequestStatus()
     hoodId = ZoneUtil.getCanonicalZoneId(status['hoodId'])
     hoodState = self.getHoodStateByNumber(hoodId)
     self.fsm.request(hoodState, [status])
Esempio n. 46
0
 def handleLeftQuietZone(self):
     status = self.quietZoneStateData.getRequestStatus()
     hoodId = ZoneUtil.getCanonicalZoneId(status['hoodId'])
     hoodState = self.getHoodStateByNumber(hoodId)
     self.fsm.request(hoodState, [
         status])
Esempio n. 47
0
 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])
Esempio n. 48
0
    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
Esempio n. 49
0
 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
Esempio n. 50
0
 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)
Esempio n. 52
0
 def getFullnameFromId(self, hoodId):
     assert (self.notify.debug("getFullnameFromId()"))
     hoodId = ZoneUtil.getCanonicalZoneId(hoodId)
     return ToontownGlobals.hoodNameMap[hoodId][-1]