def spawnObjects(self):
     filename = self.air.genDNAFileName(self.zoneId)
     self.air.dnaSpawner.spawnObjects(filename, self.zoneId)
     self.buildingMgr = DistributedBuildingMgrAI(self.air, self.zoneId, self.air.dnaStoreMap[self.zoneId], self.air.trophyMgr)
     self.sp = DistributedSuitPlannerAI(self.air, self.zoneId)
     self.sp.generateWithRequired(self.zoneId)
     self.sp.d_setZoneId(self.zoneId)
     self.sp.initTasks()
    def start(self):
        self.suitPlanner = DistributedSuitPlannerAI(self.air, self.zoneId,
                                                    self.setupDNA)
        self.suitPlanner.generateWithRequired(self.zoneId)
        self.suitPlanner.d_setZoneId(self.zoneId)

        self.barrelPlanner = ExperimentBarrelPlannerAI(self)

        self.b_setState('Phase0')

        DistributedEventAI.start(self)
 def createSuitPlanner(self, zone):
     sp = DistributedSuitPlannerAI(self.air, zone)
     sp.generateWithRequired(zone)
     sp.d_setZoneId(zone)
     sp.initTasks()
     self.air.suitPlanners[zone] = sp
     self.suitPlanners.append(sp)
예제 #4
0
    def __init__(self, air, zoneId):
        StreetAI.__init__(self, air, zoneId)
        self.spawnObjects('phase_5/dna/toontown_central_%i.dna' % zoneId)

        suitPlanner = DistributedSuitPlannerAI(self.air)
        suitPlanner.setZoneId(self.zoneId)
        suitPlanner.generateWithRequired(self.zoneId)
        suitPlanner.startSpawning()
 def createSuitPlanner(self, zone):
     sp = DistributedSuitPlannerAI(self.air, zone)
     sp.generateWithRequired(zone)
     sp.d_setZoneId(zone)
     sp.initTasks()
     self.air.suitPlanners[zone] = sp
     self.suitPlanners.append(sp)
예제 #6
0
    def __init__(self, air, zoneId):
        StreetAI.__init__(self, air, zoneId)
        self.spawnObjects("phase_5/dna/toontown_central_%i.dna" % zoneId)

        suitPlanner = DistributedSuitPlannerAI(self.air)
        suitPlanner.setZoneId(self.zoneId)
        suitPlanner.generateWithRequired(self.zoneId)
        suitPlanner.startSpawning()
    def start(self):
        self.suitPlanner = DistributedSuitPlannerAI(self.air, self.zoneId, self.setupDNA)
        self.suitPlanner.generateWithRequired(self.zoneId)
        self.suitPlanner.d_setZoneId(self.zoneId)

        self.barrelPlanner = ExperimentBarrelPlannerAI(self)

        self.b_setState('Phase0')

        DistributedEventAI.start(self)
class StreetAI:
    """
    AI-side representation of everything in a single street.

    One subclass of this class exists for every neighborhood in the game.
    StreetAIs are responsible for spawning all SuitPlanners, ponds, and other
    street objects, etc.
    """
    def __init__(self, air, zoneId):
        self.air = air
        self.zoneId = zoneId

        # If it is a time where we want snow
        self.wantSnow = True

        dnaStore = DNAStorage()
        self.air.dnaStoreMap[self.zoneId] = dnaStore
        self.spawnObjects()
        self.createTime()
        self.createRain()

    def spawnObjects(self):
        filename = self.air.genDNAFileName(self.zoneId)
        self.air.dnaSpawner.spawnObjects(filename, self.zoneId)
        self.buildingMgr = DistributedBuildingMgrAI(
            self.air, self.zoneId, self.air.dnaStoreMap[self.zoneId],
            self.air.trophyMgr)
        self.sp = DistributedSuitPlannerAI(self.air, self.zoneId)
        self.sp.generateWithRequired(self.zoneId)
        self.sp.d_setZoneId(self.zoneId)
        self.sp.initTasks()

    def createTime(self):
        if self.zoneId not in [9100, 9200]:
            self.dayTimeMgr = DistributedDayTimeManagerAI.DistributedDayTimeManagerAI(
                self.air)
            self.dayTimeMgr.generateWithRequired(self.zoneId)
            self.dayTimeMgr.start()

    def createRain(self):
        self.rainMgr = DistributedRainManagerAI.DistributedRainManagerAI(
            self.air)
        self.rainMgr.generateWithRequired(self.zoneId)
        if self.zoneId in [1100, 1200, 1300] or self.wantSnow:
            self.rainMgr.start(
                True)  # We want it to always rain in donalds dock
        else:
            self.rainMgr.start(False)
class StreetAI:
    """
    AI-side representation of everything in a single street.

    One subclass of this class exists for every neighborhood in the game.
    StreetAIs are responsible for spawning all SuitPlanners,ponds, and other
    street objects, etc.
    """
    
    def __init__(self, air, zoneId):
        self.air = air
        self.zoneId = zoneId
        
        self.air.dnaStoreMap[self.zoneId] = self.air.loadDNA(self.air.genDNAFileName(self.zoneId)).generateData()
        self.spawnObjects()

    def spawnObjects(self):
        filename = self.air.genDNAFileName(self.zoneId)
        self.air.dnaSpawner.spawnObjects(filename, self.zoneId)
        self.buildingMgr = DistributedBuildingMgrAI(self.air, self.zoneId, self.air.dnaStoreMap[self.zoneId], self.air.trophyMgr)
        self.sp = DistributedSuitPlannerAI(self.air, self.zoneId)
        self.sp.generateWithRequired(self.zoneId)
        self.sp.d_setZoneId(self.zoneId)
        self.sp.initTasks()
 def enterInvasion(self):
     self.suitPlanner = DistributedSuitPlannerAI(self.air, self.zoneId)
     self.suitPlanner.generateWithRequired(self.zoneId)
     self.suitPlanner.d_setZoneId(self.zoneId)
     self.suitPlanner.initTasks()
class DistributedBetaEventTTCAI(DistributedEventAI):
    notify = directNotify.newCategory('DistributedBetaEventTTCAI')

    def __init__(self, air):
        DistributedEventAI.__init__(self, air)
        self.air = air
        self.air.betaEventTTC = self

    def start(self):
        DistributedEventAI.start(self)

    def setVisGroups(self, visGroups):
        self.sendUpdate('setVisGroups', [visGroups])

    def setupDNA(self, suitPlanner):
        if suitPlanner.dnaStore:
            return None
        suitPlanner.dnaStore = DNAStorage()
        loadDNAFileAI(suitPlanner.dnaStore,
                      'phase_4/dna/toontown_central_old_sz.pdna')
        visGroups = {}
        for visGroup in suitPlanner.dnaStore.DNAVisGroups:
            zone = int(visGroup.name)
            if zone == 20000:
                visGroups[20000] = self.zoneId
            else:
                visGroups[zone] = self.air.allocateZone()
            visGroup.name = str(visGroups[zone])

        for suitEdges in suitPlanner.dnaStore.suitEdges.values():
            for suitEdge in suitEdges:
                suitEdge.setZoneId(visGroups[suitEdge.zoneId])

        self.setVisGroups(visGroups.values())
        suitPlanner.initDNAInfo()

    def systemMessageAll(self, text):
        for doId in simbase.air.doId2do:
            if str(doId)[:2] == '10':
                player = simbase.air.doId2do.get(doId)
                player.d_setSystemMessage(0, text)

    def enterPreEvent(self):
        self.systemMessageAll(
            'Toon HQ: All toons are being teleported to Toontown Central for the Special Event!'
        )
        for doId in simbase.air.doId2do:
            if str(doId)[:2] == '10':
                player = simbase.air.doId2do.get(doId)
                player.magicTeleportInitiate(doId, 2900, 2900)

    def exitPreEvent(self):
        pass

    def enterEvent(self):
        pass

    def exitEvent(self):
        pass

    def enterHoncho(self):
        pass

    def exitHoncho(self):
        pass

    def enterGotoHq(self):
        self.systemMessageAll(
            'Toon HQ: All toons are being teleported to Loony Labs!')
        for doId in simbase.air.doId2do:
            if str(doId)[:2] == '10':
                player = simbase.air.doId2do.get(doId)
                player.magicTeleportInitiate(doId, 19000, 19000)

        taskMgr.doMethodLater(6, self.air.betaEventBDHQ.setState('StartBd'))

    def exitGotoHq(self):
        pass

    def enterInvasion(self):
        self.suitPlanner = DistributedSuitPlannerAI(self.air, self.zoneId)
        self.suitPlanner.generateWithRequired(self.zoneId)
        self.suitPlanner.d_setZoneId(self.zoneId)
        self.suitPlanner.initTasks()

    def exitInvasion(self):
        if self.suitPlanner:
            self.suitPlanner.cleanup()
            self.suitPlanner = None

    def enterCogTv(self):
        pass

    def exitCogTv(self):
        pass
class DistributedExperimentEventAI(DistributedEventAI):
    notify = directNotify.newCategory('DistributedExperimentEventAI')

    def __init__(self, air):
        DistributedEventAI.__init__(self, air)

        self.suitPlanner = None
        self.barrelPlanner = None
        self.currentChallenge = None

    def start(self):
        self.suitPlanner = DistributedSuitPlannerAI(self.air, self.zoneId,
                                                    self.setupDNA)
        self.suitPlanner.generateWithRequired(self.zoneId)
        self.suitPlanner.d_setZoneId(self.zoneId)

        self.barrelPlanner = ExperimentBarrelPlannerAI(self)

        self.b_setState('Phase0')

        DistributedEventAI.start(self)

    def setCogDifficulty(self, difficulty):
        if difficulty > 3:
            self.notify.warning('Tried setting the cog difficulty too high')
            return

        self.suitPlanner.resetSuitHoodInfo(30000 + difficulty)
        self.suitPlanner.flySuits()

    def setVisGroups(self, visGroups):
        self.sendUpdate('setVisGroups', [visGroups])

    def setupDNA(self, suitPlanner):
        if suitPlanner.dnaStore:
            return None

        suitPlanner.dnaStore = DNAStorage()
        loadDNAFileAI(suitPlanner.dnaStore,
                      'phase_4/dna/toontown_central_sz.pdna')

        visGroups = {}
        for visGroup in suitPlanner.dnaStore.DNAVisGroups:
            zone = int(visGroup.name)
            if zone == 2000:
                visGroups[2000] = self.zoneId
            else:
                visGroups[zone] = self.air.allocateZone()
            visGroup.name = str(visGroups[zone])

        for suitEdges in suitPlanner.dnaStore.suitEdges.values():
            for suitEdge in suitEdges:
                suitEdge.setZoneId(visGroups[suitEdge.zoneId])

        self.setVisGroups(visGroups.values())
        suitPlanner.initDNAInfo()

    def setChallengeCount(self, count):
        self.sendUpdate('setChallengeCount', [count])

    def setChallenge(self, challengeId):
        self.currentChallenge = None
        if challengeId:
            self.currentObjective = ExperimentChallenges.makeChallenge(
                challengeId, self)
        self.sendUpdate('setChallenge', [challengeId])

    def challengeComplete(self):
        self.sendUpdate('challengeComplete', [])
        self.setChallenge(0)

    def getInitialChallengeId(self):
        return min(len(self.participants), 5)

    def joinEvent(self, avId):
        DistributedEventAI.joinEvent(self, avId)

        self.makeFreshToon(avId)

    def leaveEvent(self, avId):
        self.restoreToon(avId)

        DistributedEventAI.leaveEvent(self, avId)

    def toonChangedZone(self, avId, zoneId):
        self.leaveEvent(avId)

    def restoreToon(self, avId):
        av = self.air.doId2do[avId]
        toonSerializer = ToonSerializer(av)
        toonSerializer.restoreToon()

    def makeFreshToon(self, avId):
        av = self.air.doId2do[avId]
        toonSerializer = ToonSerializer(av)
        toonSerializer.saveToon(callback=self.__resetToonStats)

    def __resetToonStats(self, av):
        av.b_setMaxHp(15)
        av.b_setHp(15)

        av.b_setMaxCarry(20)
        av.b_setMoney(0)
        av.b_setQuestCarryLimit(1)

        av.b_setTrackAccess([0, 0, 0, 0, 1, 1, 0])
        av.b_setTrackBonusLevel([-1, -1, -1, -1, -1, -1, -1])

        av.experience = Experience(owner=av)
        av.b_setExperience(av.experience.makeNetString())

        av.inventory = InventoryBase(av)
        av.inventory.maxOutInv()
        av.b_setInventory(av.inventory.makeNetString())

        av.b_setPinkSlips(1)

        av.b_setCogMerits([0, 0, 0, 0])
        av.b_setCogParts([0, 0, 0, 0])
        av.b_setCogTypes([0, 0, 0, 0])
        av.b_setCogLevels([0, 0, 0, 0])
        av.b_setCogStatus([1] * 32)
        av.b_setCogCount([0] * 32)
        av.b_setCogRadar([0, 0, 0, 0])
        av.b_setBuildingRadar([0, 0, 0, 0])
        av.b_setPromotionStatus([0, 0, 0, 0])

        av.b_setQuests([])
        av.b_setResistanceMessages([])

        av.b_setNPCFriendsDict([])

        av.b_setExperience(av.experience.makeNetString())

    def enterIntroduction(self):
        pass

    def exitIntroduction(self):
        pass

    def enterPhase0(self):
        self.suitPlanner.initTasks()
        self.barrelPlanner.start()
        self.setCogDifficulty(0)

        self.setChallenge(self.getInitialChallengeId())

    def exitPhase0(self):
        pass

    def enterPhase1(self):
        self.setCogDifficulty(1)

    def exitPhase1(self):
        pass

    def enterPhase2(self):
        self.setCogDifficulty(2)

    def exitPhase2(self):
        pass

    def enterPhase3(self):
        self.setCogDifficulty(3)

    def exitPhase3(self):
        pass

    def enterCredits(self):
        self.setChallenge(0)

        if self.barrelPlanner:
            self.barrelPlanner.cleanup()
            self.barrelPlanner = None

        if self.suitPlanner:
            self.suitPlanner.cleanup()
            self.suitPlanner = None

    def exitCredits(self):
        pass
class DistributedExperimentEventAI(DistributedEventAI):
    notify = directNotify.newCategory('DistributedExperimentEventAI')

    def __init__(self, air):
        DistributedEventAI.__init__(self, air)

        self.suitPlanner = None
        self.barrelPlanner = None
        self.currentChallenge = None

    def start(self):
        self.suitPlanner = DistributedSuitPlannerAI(self.air, self.zoneId, self.setupDNA)
        self.suitPlanner.generateWithRequired(self.zoneId)
        self.suitPlanner.d_setZoneId(self.zoneId)

        self.barrelPlanner = ExperimentBarrelPlannerAI(self)

        self.b_setState('Phase0')

        DistributedEventAI.start(self)

    def setCogDifficulty(self, difficulty):
        if difficulty > 3:
            self.notify.warning('Tried setting the cog difficulty too high')
            return

        self.suitPlanner.resetSuitHoodInfo(30000 + difficulty)
        self.suitPlanner.flySuits()

    def setVisGroups(self, visGroups):
        self.sendUpdate('setVisGroups', [visGroups])

    def setupDNA(self, suitPlanner):
        if suitPlanner.dnaStore:
            return None

        suitPlanner.dnaStore = DNAStorage()
        loadDNAFileAI(suitPlanner.dnaStore, 'phase_4/dna/toontown_central_sz.pdna')

        visGroups = {}
        for visGroup in suitPlanner.dnaStore.DNAVisGroups:
            zone = int(visGroup.name)
            if zone == 2000:
                visGroups[2000] = self.zoneId
            else:
                visGroups[zone] = self.air.allocateZone()
            visGroup.name = str(visGroups[zone])

        for suitEdges in suitPlanner.dnaStore.suitEdges.values():
            for suitEdge in suitEdges:
                suitEdge.setZoneId(visGroups[suitEdge.zoneId])

        self.setVisGroups(visGroups.values())
        suitPlanner.initDNAInfo()

    def setChallengeCount(self, count):
        self.sendUpdate('setChallengeCount', [count])

    def setChallenge(self, challengeId):
        self.currentChallenge = None
        if challengeId:
            self.currentObjective = ExperimentChallenges.makeChallenge(challengeId, self)
        self.sendUpdate('setChallenge', [challengeId])

    def challengeComplete(self):
        self.sendUpdate('challengeComplete', [])
        self.setChallenge(0)

    def getInitialChallengeId(self):
        return min(len(self.participants), 5)

    def joinEvent(self, avId):
        DistributedEventAI.joinEvent(self, avId)

        self.makeFreshToon(avId)

    def leaveEvent(self, avId):
        self.restoreToon(avId)

        DistributedEventAI.leaveEvent(self, avId)

    def toonChangedZone(self, avId, zoneId):
        self.leaveEvent(avId)

    def restoreToon(self, avId):
        av = self.air.doId2do[avId]
        toonSerializer = ToonSerializer(av)
        toonSerializer.restoreToon()

    def makeFreshToon(self, avId):
        av = self.air.doId2do[avId]
        toonSerializer = ToonSerializer(av)
        toonSerializer.saveToon(callback=self.__resetToonStats)

    def __resetToonStats(self, av):
        av.b_setMaxHp(15)
        av.b_setHp(15)

        av.b_setMaxCarry(20)
        av.b_setMoney(0)
        av.b_setQuestCarryLimit(1)

        av.b_setTrackAccess([0, 0, 0, 0, 1, 1, 0])
        av.b_setTrackBonusLevel([-1, -1, -1, -1, -1, -1, -1])

        av.experience = Experience(owner=av)
        av.b_setExperience(av.experience.makeNetString())

        av.inventory = InventoryBase(av)
        av.inventory.maxOutInv()
        av.b_setInventory(av.inventory.makeNetString())

        av.b_setPinkSlips(1)

        av.b_setCogMerits([0, 0, 0, 0])
        av.b_setCogParts([0, 0, 0, 0])
        av.b_setCogTypes([0, 0, 0, 0])
        av.b_setCogLevels([0, 0, 0, 0])
        av.b_setCogStatus([1] * 32)
        av.b_setCogCount([0] * 32)
        av.b_setCogRadar([0, 0, 0, 0])
        av.b_setBuildingRadar([0, 0, 0, 0])
        av.b_setPromotionStatus([0, 0, 0, 0])

        av.b_setQuests([])
        av.b_setResistanceMessages([])

        av.b_setNPCFriendsDict([])

        av.b_setExperience(av.experience.makeNetString())

    def enterIntroduction(self):
        pass

    def exitIntroduction(self):
        pass

    def enterPhase0(self):
        self.suitPlanner.initTasks()
        self.barrelPlanner.start()
        self.setCogDifficulty(0)

        self.setChallenge(self.getInitialChallengeId())

    def exitPhase0(self):
        pass

    def enterPhase1(self):
        self.setCogDifficulty(1)

    def exitPhase1(self):
        pass

    def enterPhase2(self):
        self.setCogDifficulty(2)

    def exitPhase2(self):
        pass

    def enterPhase3(self):
        self.setCogDifficulty(3)

    def exitPhase3(self):
        pass

    def enterCredits(self):
        self.setChallenge(0)

        if self.barrelPlanner:
            self.barrelPlanner.cleanup()
            self.barrelPlanner = None

        if self.suitPlanner:
            self.suitPlanner.cleanup()
            self.suitPlanner = None

    def exitCredits(self):
        pass