def handleAvatarLeave(self, avatar, reason):
        DistributedBattleZoneAI.handleAvatarLeave(self, avatar, reason)

        if hasattr(self, 'watchingAvatarIds') and len(
                self.watchingAvatarIds) == 0:
            self.resetEverything()
            self.bldg.elevator.b_setState('opening')
 def setAvatars(self, avIds):
     DistributedBattleZoneAI.d_setAvatars(self, avIds)
     DistributedBattleZoneAI.setAvatars(self, avIds)
     self.toonId2suitsTargeting = {
         avId: []
         for avId in self.watchingAvatarIds
     }
예제 #3
0
    def handleAvatarLeave(self, avatar, reason):
        DistributedBattleZoneAI.handleAvatarLeave(self, avatar, reason)

        if hasattr(self, 'watchingAvatarIds') and len(
                self.watchingAvatarIds) == 0:
            self.requestDelete()
            self.air.shutdown()
예제 #4
0
    def generate(self):
        DistributedBattleZoneAI.generate(self)

        # Link up networked entities
        from src.coginvasion.szboss import (DistributedIndicatorLightAI,
                                            DistributedSZBossSuitAI,
                                            DistributedCutsceneAI,
                                            DistributedGoonAI,
                                            DistributedGeneratorAI,
                                            DistributedSZBossToonAI)
        from src.coginvasion.cogoffice.AIEntities import (SuitSpawn)
        from src.coginvasion.battle.DistributedHPBarrelAI import DistributedHPBarrelAI
        from src.coginvasion.battle.DistributedGagBarrelAI import DistributedGagBarrelAI
        #self.bspLoader.linkServerEntityToClass("npc_goon",              DistributedGoonAI.DistributedGoonAI)
        self.bspLoader.linkServerEntityToClass(
            "npc_suit", DistributedSZBossSuitAI.DistributedSZBossSuitAI)
        self.bspLoader.linkServerEntityToClass(
            "info_cutscene", DistributedCutsceneAI.DistributedCutsceneAI)
        self.bspLoader.linkServerEntityToClass(
            "info_indicator_light",
            DistributedIndicatorLightAI.DistributedIndicatorLightAI)
        self.bspLoader.linkServerEntityToClass(
            "func_generator", DistributedGeneratorAI.DistributedGeneratorAI)
        self.bspLoader.linkServerEntityToClass(
            "npc_toon", DistributedSZBossToonAI.DistributedSZBossToonAI)
        self.bspLoader.linkServerEntityToClass("cogoffice_suitspawn",
                                               SuitSpawn)
        self.bspLoader.linkServerEntityToClass("item_gagbarrel",
                                               DistributedGagBarrelAI)
        self.bspLoader.linkServerEntityToClass("item_laffbarrel",
                                               DistributedHPBarrelAI)
 def rewardSequenceComplete(self, timestamp):
     DistributedBattleZoneAI.rewardSequenceComplete(self, timestamp)
     self.stopTrackingAll()
     base.taskMgr.doMethodLater(0.1,
                                self.victoryTask,
                                self.uniqueName('victoryTask'),
                                extraArgs=[self.avReadyToContinue],
                                appendTask=True)
    def enterVictory(self):
        DistributedBattleZoneAI.battleComplete(self)

        for avId in self.watchingAvatarIds:
            avatar = self.air.doId2do.get(avId)
            if avatar:
                # Let this avatar's quest manager know that they have defeated a cog building.
                avatar.questManager.cogBuildingDefeated(
                    self.hood, self.deptClass, self.numFloors)
 def delete(self):
     base.taskMgr.remove(self.uniqueName('monitorAvatar'))
     self.avatarId = None
     self.av = None
     if self.tutSuit:
         self.tutSuit.disable()
         self.tutSuit.requestDelete()
         self.tutSuit = None
     DistributedBattleZoneAI.delete(self)
예제 #8
0
    def loadBSPLevel(self, lfile, transition=False):
        from panda3d.core import Filename
        self.levelPrefix = Filename.fromOsSpecific(
            lfile).getBasenameWoExtension().split('_')[0].lower()
        DistributedBattleZoneAI.loadBSPLevel(self, lfile, transition)

        if self.isLevelType(self.WavesLevel):
            spawns = self.bspLoader.findAllEntities("batch_cog_spawner")
            if len(spawns) > 0:
                self.batchSpawn = spawns[0]
예제 #9
0
    def __init__(self, air):
        DistributedBattleZoneAI.__init__(self, air)
        self.battleType = BattleGlobals.BTArcade
        self.matchData = None
        self.fsm = ClassicFSM('DistributedArcadeBattleZoneAI', [
            State('off', self.enterOff, self.exitOff),
        ], 'off', 'off')
        self.readyAvatars = []

        # Variables related to turrets
        self.turretMgr = None
예제 #10
0
    def addAvatar(self, avId, andUpdateAvatars=0):
        DistributedBattleZoneAI.addAvatar(self, avId, andUpdateAvatars)

        # yikes
        #
        # This makes the local avatar be correctly registered under the
        # battle zone since there is a dependency-cycle between them.
        av = self.air.doId2do.get(avId)
        if av:
            self.air.removeAvatar(av)
            self.air.addAvatar(av)
 def resetEverything(self):
     DistributedBattleZoneAI.resetStats(self)
     self.currentFloor = 0
     self.toonId2suitsTargeting = {}
     self.spotTaken2suitId = {}
     self.cleanupGuardSuits()
     self.resetPhysics()
     self.ignoreEvents()
     self.unloadBSPLevel()
     self.readyAvatars = []
     for elevator in self.elevators:
         if elevator:
             elevator.b_setState('closed')
     self.b_setState('off')
예제 #12
0
    def generate(self):
        DistributedBattleZoneAI.generate(self)

        from src.coginvasion.deathmatch.DistributedGagPickupAI import DistributedGagPickupAI
        from src.coginvasion.szboss.InfoBgm import InfoBgm
        from src.coginvasion.szboss.DistributedSZBossToonAI import DistributedSZBossToonAI
        from src.coginvasion.szboss.DistributedSZBossSuitAI import DistributedSZBossSuitAI
        from src.coginvasion.szboss.ScriptedSequenceAI import ScriptedSequenceAI
        from src.coginvasion.szboss.ScriptedSpeechAI import ScriptedSpeechAI
        from src.coginvasion.szboss.goon.NPC_GoonAI import NPC_GoonAI
        from src.coginvasion.cogoffice.AIEntities import SuitSpawn
        from src.coginvasion.battle.DistributedHPBarrelAI import DistributedHPBarrelAI
        from src.coginvasion.arcade.BatchCogSpawnerAI import BatchCogSpawnerAI
        from src.mod.CogStomperAI import CogStomperAI
        from src.mod.CogCageAI import CogCageAI
        from src.mod.NPC_VPAI import NPC_VPAI
        from src.mod.KeypadAI import KeypadAI
        from src.mod.LaffBarrelAI import LaffBarrelAI
        self.bspLoader.linkServerEntityToClass("gag_pickup",
                                               DistributedGagPickupAI)
        self.bspLoader.linkServerEntityToClass("npc_toon",
                                               DistributedSZBossToonAI)
        self.bspLoader.linkServerEntityToClass("npc_suit",
                                               DistributedSZBossSuitAI)
        self.bspLoader.linkServerEntityToClass("scripted_sequence",
                                               ScriptedSequenceAI)
        self.bspLoader.linkServerEntityToClass("scripted_speech",
                                               ScriptedSpeechAI)
        self.bspLoader.linkServerEntityToClass("cogoffice_suitspawn",
                                               SuitSpawn)
        self.bspLoader.linkServerEntityToClass("batch_cog_spawner",
                                               BatchCogSpawnerAI)
        self.bspLoader.linkServerEntityToClass("item_laffbarrel",
                                               DistributedHPBarrelAI)
        self.bspLoader.linkServerEntityToClass("cog_stomper", CogStomperAI)
        self.bspLoader.linkServerEntityToClass("cog_cage", CogCageAI)
        self.bspLoader.linkServerEntityToClass("npc_goon", NPC_GoonAI)
        self.bspLoader.linkServerEntityToClass("npc_vp", NPC_VPAI)
        self.bspLoader.linkServerEntityToClass("item_keypad", KeypadAI)
        self.bspLoader.linkServerEntityToClass("mod_item_laffbarrel",
                                               LaffBarrelAI)
 def __init__(self, air, numFloors, dept, hood, bldg, exteriorZoneId):
     DistributedBattleZoneAI.__init__(self, air)
     self.STOP_TRACKING_WHEN_DEAD = 0
     self.fsm = ClassicFSM.ClassicFSM('DistributedCogOfficeBattleAI', [
         State.State('off', self.enterOff, self.exitOff),
         State.State('floorIntermission', self.enterFloorIntermission,
                     self.exitFloorIntermission),
         State.State('bldgComplete', self.enterBldgComplete,
                     self.exitBldgComplete),
         State.State('battle', self.enterBattle, self.exitBattle),
         State.State('rideElevator', self.enterRideElevator,
                     self.exitRideElevator),
         State.State('faceOff', self.enterFaceOff, self.exitFaceOff),
         State.State('victory', self.enterVictory, self.exitVictory)
     ], 'off', 'off')
     self.fsm.enterInitialState()
     self.hood = hood
     self.bldg = bldg
     self.bldgDoId = self.bldg.doId
     self.exteriorZoneId = exteriorZoneId
     self.toonId2suitsTargeting = {}
     self.guardSuits = []
     self.roomsVisited = []
     self.numFloors = numFloors
     self.currentFloor = 0
     self.tauntSuitId = 0
     self.currentRoom = ""
     self.readyAvatars = []
     self.elevators = [None, None]
     self.entranceElevator = None
     self.exitElevator = None
     self.infoEntity = None
     self.dept = dept
     if dept == 'c':
         self.deptClass = Dept.BOSS
     elif dept == 'l':
         self.deptClass = Dept.LAW
     elif dept == 's':
         self.deptClass = Dept.SALES
     elif dept == 'm':
         self.deptClass = Dept.CASH
예제 #14
0
    def __init__(self, air):
        DistributedBattleZoneAI.__init__(self, air)
        self.lost = False

        self.batchSpawn = None

        self.waveNum = 0
        self.waveSuitsRemaining = 0
        self.waveStartTime = 0.0
        self.waveStats = {0: {}}
        self.stats = {}

        self.levelPrefix = ""

        self.numberDropped = False
        self.codeWasUsed = False
        self.numberPickUpTime = 0.0
        self.getNumberIval()

        self.numberIdx = 0
        self.numbers = [[1, 5, 9, 3], [2, 9, 4, 1], [3, 0, 1, 0], [4, 8, 9, 2]]
예제 #15
0
    def loadedMap(self):
        DistributedBattleZoneAI.loadedMap(self)

        print("Loaded map from client!!!!")

        if not self.mapWasTransitionedTo:
            avId = self.air.getAvatarIdFromSender()
            inst = self.getAvatarInstance(avId)
            if inst:
                self.gameRules.respawnPlayer(inst.avatar)

                if self.batchSpawn and self.isLevelType(self.WavesLevel):
                    self.beginWaveLater(1)

        if self.map == "facility_battle_v2":
            self.numbers = []
            keypads = self.bspLoader.findAllEntities("item_keypad")
            keypads.sort(
                key=lambda keypad: keypad.getCEntity().getTargetname())
            for i in range(len(keypads)):
                keypad = keypads[i]
                self.numbers.append(list(keypad.code))
            print(self.numbers)
 def delete(self):
     self.fsm.requestFinalState()
     self.fsm = None
     self.infoEntity = None
     self.currentFloor = None
     self.toonId2suitsTargeting = None
     self.spotTaken2suitId = None
     self.cleanupGuardSuits()
     self.guardSuits = None
     self.readyAvatars = None
     self.cleanupElevators()
     self.elevators = None
     self.entanceElevator = None
     self.exitElevator = None
     self.hood = None
     self.numFloors = None
     self.dept = None
     self.deptClass = None
     self.bldg = None
     self.bldgDoId = None
     self.exteriorZoneId = None
     self.availableBattlePoints = None
     DistributedBattleZoneAI.delete(self)
    def generate(self):
        DistributedBattleZoneAI.generate(self)

        import AIEntities
        from src.coginvasion.szboss import (InfoTimer, DistributedFuncDoorAI,
                                            DistributedTriggerAI)
        from src.coginvasion.battle import (DistributedHPBarrelAI,
                                            DistributedGagBarrelAI)
        self.bspLoader.linkServerEntityToClass("cogoffice_suitspawn",
                                               AIEntities.SuitSpawn)
        self.bspLoader.linkServerEntityToClass("cogoffice_hangoutpoint",
                                               AIEntities.SuitHangout)
        self.bspLoader.linkServerEntityToClass("cogoffice_elevator",
                                               DistributedCogOfficeElevatorAI)
        self.bspLoader.linkServerEntityToClass("info_timer",
                                               InfoTimer.InfoTimer)
        self.bspLoader.linkServerEntityToClass(
            "func_door", DistributedFuncDoorAI.DistributedFuncDoorAI)
        self.bspLoader.linkServerEntityToClass("info_cogoffice_floor",
                                               AIEntities.InfoCogOfficeFloor)
        self.bspLoader.linkServerEntityToClass(
            "item_gagbarrel", DistributedGagBarrelAI.DistributedGagBarrelAI)
        self.bspLoader.linkServerEntityToClass(
            "item_laffbarrel", DistributedHPBarrelAI.DistributedHPBarrelAI)
예제 #18
0
    def generate(self):
        DistributedBattleZoneAI.generate(self)

        from src.coginvasion.deathmatch.DistributedGagPickupAI import DistributedGagPickupAI
        self.bspLoader.linkServerEntityToClass("gag_pickup",
                                               DistributedGagPickupAI)
예제 #19
0
 def announceGenerate(self):
     DistributedBattleZoneAI.announceGenerate(self)
     self.turretMgr = DistributedPieTurretManagerAI(self.air)
     self.turretMgr.generateWithRequired(self.zoneId)
     self.fsm.enterInitialState()
예제 #20
0
 def announceGenerate(self):
     DistributedBattleZoneAI.announceGenerate(self)
     self.b_setMap("sellbot_third_floor")
예제 #21
0
 def __init__(self, air, avId):
     DistributedBattleZoneAI.__init__(self, air)
     # The avatar that is playing in this sewer.
     self.avId = avId
     self.setAvatars([avId])
     self.suits = []
예제 #22
0
 def delete(self):
     print("BZone delete")
     self.lost = None
     DistributedBattleZoneAI.delete(self)
 def announceGenerate(self):
     DistributedBattleZoneAI.announceGenerate(self)
     # Let's go ahead and add the avatar doing the tutorial to the battleZone's list and data dict.
     self.addAvatar(self.avatarId)
     base.taskMgr.add(self.__monitorAvatar,
                      self.uniqueName('monitorAvatar'))
 def __init__(self, air, avatarId):
     DistributedBattleZoneAI.__init__(self, air)
     self.avatarId = avatarId
     self.av = self.air.doId2do.get(self.avatarId)
     self.tutSuit = None
     self.suitsKilled = 0
예제 #25
0
 def delete(self):
     self.avId = None
     DistributedBattleZoneAI.delete(self)