def createTreasurePlanner(self): if self.zoneId in (8000, 17000, 11000, 12000, 13000, 10000, 1002000, 19000, 62000): return treasureType, healAmount, spawnPoints, spawnRate, maxTreasures = TreasureGlobals.SafeZoneTreasureSpawns[self.zoneId] self.treasurePlanner = SZTreasurePlannerAI(self.zoneId, treasureType, healAmount, spawnPoints, spawnRate, maxTreasures) self.treasurePlanner.start()
def createTreasurePlanner(self): treasureType, healAmount, spawnPoints, spawnRate, maxTreasures = TreasureGlobals.SafeZoneTreasureSpawns[ self.HOOD] self.treasurePlanner = SZTreasurePlannerAI(self.safezone, treasureType, healAmount, spawnPoints, spawnRate, maxTreasures) self.treasurePlanner.start()
def createTreasurePlanner(self): treasureType, healAmount, spawnPoints, spawnRate, maxTreasures = TreasureGlobals.SafeZoneTreasureSpawns[ ToontownGlobals.MyEstate] self.treasurePlanner = SZTreasurePlannerAI(self.zoneId, treasureType, healAmount, spawnPoints, spawnRate, maxTreasures) self.treasurePlanner.start()
class DistributedEstateAI(DistributedObjectAI): notify = DirectNotifyGlobal.directNotify.newCategory("DistributedEstateAI") def __init__(self, air): DistributedObjectAI.__init__(self, air) self.toons = [0, 0, 0, 0, 0, 0] self.houses = [None] * 6 self.decorData = [] self.estateType = 0 # NOT SURE IF THIS HAS ANY USE BUT THANKS DISNEY self.owner = None def generate(self): DistributedObjectAI.generate(self) #self.createTreasurePlanner() def destroy(self): for house in self.houses: if house: house.requestDelete() del self.houses[:] '''if self.treasurePlanner: self.treasurePlanner.stop()''' self.requestDelete() def setEstateReady(self): pass def setClientReady(self): self.sendUpdate('setEstateReady', []) def setEstateType(self, type): self.estateType = type def d_setEstateType(self, type): self.sendUpdate('setEstateType', [type]) def b_setEstateType(self, type): self.setEstateType(type) self.d_setEstateType(type) def getEstateType(self): return self.estateType def setClosestHouse(self, todo0): pass def setTreasureIds(self, todo0): pass def createTreasurePlanner(self): treasureType, healAmount, spawnPoints, spawnRate, maxTreasures = TreasureGlobals.SafeZoneTreasureSpawns[ ToontownGlobals.MyEstate] self.treasurePlanner = SZTreasurePlannerAI(self.zoneId, treasureType, healAmount, spawnPoints, spawnRate, maxTreasures) self.treasurePlanner.start()
class SZHoodAI(HoodAI): """ AI-side representation of everything in a single safezone neighborhood. One subclass of this class exists for every neighborhood in the game. HoodAIs are responsible for spawning all TreasurePlanners, ponds, and other hood objects, etc. """ def __init__(self, air): HoodAI.__init__(self, air) self.safezone = self.HOOD self.streets = {} self.trolley = None self.pond = None self.buildingMgr = None self.createZone() self.createStreets() def createZone(self): HoodAI.createZone(self) self.air.dnaStoreMap[self.HOOD] = self.air.loadDNA( self.air.genDNAFileName(self.HOOD)).generateData() self.createTrolley() self.createTreasurePlanner() self.buildingMgr = DistributedBuildingMgrAI( self.air, self.HOOD, self.air.dnaStoreMap[ self.HOOD], self.air.trophyMgr) NPCToons.createNpcsInZone(self.air, self.HOOD) def createStreets(self): branchIds = ToontownGlobals.HoodHierarchy.get(self.HOOD, []) for branch in branchIds: street = StreetAI(self.air, branch) self.streets[branch] = street def createTrolley(self): self.trolley = DistributedTrolleyAI(self.air) self.trolley.generateWithRequired(self.safezone) def createTreasurePlanner(self): treasureType, healAmount, spawnPoints, spawnRate, maxTreasures = TreasureGlobals.SafeZoneTreasureSpawns[ self.HOOD] self.treasurePlanner = SZTreasurePlannerAI( self.safezone, treasureType, healAmount, spawnPoints, spawnRate, maxTreasures) self.treasurePlanner.start() def spawnObjects(self): filename = self.air.genDNAFileName(self.safezone) self.air.dnaSpawner.spawnObjects(filename, self.safezone)
def createTreasurePlanner(self): spawnInfo = TreasureGlobals.SafeZoneTreasureSpawns.get(self.canonicalHoodId) if not spawnInfo: return treasureType, healAmount, spawnPoints, spawnRate, maxTreasures = spawnInfo self.treasurePlanner = SZTreasurePlannerAI( self.canonicalHoodId, treasureType, healAmount, spawnPoints, spawnRate, maxTreasures) self.treasurePlanner.start()
class HoodAI: """ AI-side representation of everything in a single neighborhood. One subclass of this class exists for every neighborhood in the game. HoodAIs are responsible for spawning all TreasurePlanners, SuitPlanners, ponds, and other safezone objects, etc. """ HOOD = None def __init__(self, air): self.air = air self.spawnNpcsIn = [2000] self.safezone = self.HOOD self.streets = {} self.trolley = None self.pond = None self.createSafeZone() self.createStreets() def createTreasurePlanner(self): treasureType, healAmount, spawnPoints, spawnRate, maxTreasures = TreasureGlobals.SafeZoneTreasureSpawns[ self.HOOD] self.treasurePlanner = SZTreasurePlannerAI(self.safezone, treasureType, healAmount, spawnPoints, spawnRate, maxTreasures) self.treasurePlanner.start() def createTrolley(self): self.trolley = DistributedTrolleyAI(self.air) self.trolley.generateWithRequired(self.safezone) def createGate(self): self.gate = DistributedPartyGateAI(self.air) self.gate.generateWithRequired(self.safezone) def createSafeZone(self): self.createTrolley() self.createTreasurePlanner() self.createGate() def createStreets(self): branchIds = ToontownGlobals.HoodHierarchy.get(self.HOOD, []) for branch in branchIds: street = StreetAI(self.air, branch) self.streets[branch] = street def spawnObjects(self): filename = self.air.genDNAFileName(self.safezone) DNASpawnerAI().spawnObjects(filename, self.safezone)
class SZHoodAI(HoodAI): """ AI-side representation of everything in a single safezone neighborhood. One subclass of this class exists for every neighborhood in the game. HoodAIs are responsible for spawning all TreasurePlanners, ponds, and other hood objects, etc. """ def __init__(self, air): HoodAI.__init__(self, air) self.safezone = self.HOOD self.streets = {} self.trolley = None self.pond = None self.buildingMgr = None self.createZone() self.createStreets() def createZone(self): HoodAI.createZone(self) self.air.dnaStoreMap[self.HOOD] = self.air.loadDNA( self.air.genDNAFileName(self.HOOD)).generateData() self.createTrolley() self.createTreasurePlanner() self.buildingMgr = DistributedBuildingMgrAI( self.air, self.HOOD, self.air.dnaStoreMap[self.HOOD], self.air.trophyMgr) NPCToons.createNpcsInZone(self.air, self.HOOD) def createStreets(self): branchIds = ToontownGlobals.HoodHierarchy.get(self.HOOD, []) for branch in branchIds: street = StreetAI(self.air, branch) self.streets[branch] = street def createTrolley(self): self.trolley = DistributedTrolleyAI(self.air) self.trolley.generateWithRequired(self.safezone) def createTreasurePlanner(self): treasureType, healAmount, spawnPoints, spawnRate, maxTreasures = TreasureGlobals.SafeZoneTreasureSpawns[ self.HOOD] self.treasurePlanner = SZTreasurePlannerAI(self.safezone, treasureType, healAmount, spawnPoints, spawnRate, maxTreasures) self.treasurePlanner.start() def spawnObjects(self): filename = self.air.genDNAFileName(self.safezone) self.air.dnaSpawner.spawnObjects(filename, self.safezone)
class HoodAI: """ AI-side representation of everything in a single neighborhood. One subclass of this class exists for every neighborhood in the game. HoodAIs are responsible for spawning all TreasurePlanners, SuitPlanners, ponds, and other safezone objects, etc. """ HOOD = None def __init__(self, air): self.air = air self.spawnNpcsIn = [2000] self.safezone = self.HOOD self.streets = {} self.trolley = None self.pond = None self.createSafeZone() self.createStreets() def createTreasurePlanner(self): treasureType, healAmount, spawnPoints, spawnRate, maxTreasures = TreasureGlobals.SafeZoneTreasureSpawns[self.HOOD] self.treasurePlanner = SZTreasurePlannerAI(self.safezone, treasureType, healAmount, spawnPoints, spawnRate, maxTreasures) self.treasurePlanner.start() def createTrolley(self): self.trolley = DistributedTrolleyAI(self.air) self.trolley.generateWithRequired(self.safezone) def createGate(self): self.gate = DistributedPartyGateAI(self.air) self.gate.generateWithRequired(self.safezone) def createSafeZone(self): self.createTrolley() self.createTreasurePlanner() self.createGate() def createStreets(self): branchIds = ToontownGlobals.HoodHierarchy.get(self.HOOD, []) for branch in branchIds: street = StreetAI(self.air, branch) self.streets[branch] = street def spawnObjects(self): filename = self.air.genDNAFileName(self.safezone) DNASpawnerAI().spawnObjects(filename, self.safezone)
def generate(self): DistributedObjectAI.generate(self) self.pond = DistributedFishingPondAI(simbase.air) self.pond.setArea(ToontownGlobals.MyEstate) self.pond.generateWithRequired(self.zoneId) self.pond.start() treasureType, healAmount, spawnPoints, spawnRate, maxTreasures = TreasureGlobals.SafeZoneTreasureSpawns[ToontownGlobals.MyEstate] self.treasurePlanner = SZTreasurePlannerAI(self.zoneId, treasureType, healAmount, spawnPoints, spawnRate, maxTreasures) self.treasurePlanner.start() spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(49.1029, -124.805, 0.344704, 90, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(46.5222, -134.739, 0.390713, 75, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(41.31, -144.559, 0.375978, 45, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(46.8254, -113.682, 0.46015, 135, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) self.jukebox = DistributedPartyJukeboxActivityAI(self.air, self.doId, (0, 0, 0, 0)) self.jukebox.generateWithRequired(self.zoneId) self.jukebox.sendUpdate('setX', [-21.8630]) self.jukebox.sendUpdate('setY', [-154.669]) self.jukebox.sendUpdate('setH', [148.7050]) self.jukebox.sendUpdate('unloadSign') ButterflyGlobals.generateIndexes(self.zoneId, ButterflyGlobals.ESTATE) for i in xrange(0, ButterflyGlobals.NUM_BUTTERFLY_AREAS[ButterflyGlobals.ESTATE]): for j in xrange(0, ButterflyGlobals.NUM_BUTTERFLIES[ButterflyGlobals.ESTATE]): butterfly = DistributedButterflyAI.DistributedButterflyAI(self.air, ButterflyGlobals.ESTATE, i, self.zoneId) butterfly.generateWithRequired(self.zoneId) butterfly.start() self.butterflies.append(butterfly)
def createTreasurePlanner(self): treasureType, healAmount, spawnPoints, spawnRate, maxTreasures = TreasureGlobals.SafeZoneTreasureSpawns[ self.HOOD] self.treasurePlanner = SZTreasurePlannerAI( self.safezone, treasureType, healAmount, spawnPoints, spawnRate, maxTreasures) self.treasurePlanner.start()
def generate(self): DistributedObjectAI.generate(self) self.pond = DistributedFishingPondAI(simbase.air) self.pond.setArea(ToontownGlobals.MyEstate) self.pond.generateWithRequired(self.zoneId) self.pond.start() treasureType, healAmount, spawnPoints, spawnRate, maxTreasures = TreasureGlobals.SafeZoneTreasureSpawns[ToontownGlobals.MyEstate] self.treasurePlanner = SZTreasurePlannerAI(self.zoneId, treasureType, healAmount, spawnPoints, spawnRate, maxTreasures) self.treasurePlanner.start() spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(49.1029, -124.805, 0.344704, 90, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(46.5222, -134.739, 0.390713, 75, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(41.31, -144.559, 0.375978, 45, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(46.8254, -113.682, 0.46015, 135, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) ButterflyGlobals.generateIndexes(self.zoneId, ButterflyGlobals.ESTATE) for i in xrange(0, ButterflyGlobals.NUM_BUTTERFLY_AREAS[ButterflyGlobals.ESTATE]): for j in xrange(0, ButterflyGlobals.NUM_BUTTERFLIES[ButterflyGlobals.ESTATE]): butterfly = DistributedButterflyAI.DistributedButterflyAI(self.air, ButterflyGlobals.ESTATE, i, self.zoneId) butterfly.generateWithRequired(self.zoneId) butterfly.start() self.butterflies.append(butterfly)
class DistributedEstateAI(DistributedObjectAI): notify = DirectNotifyGlobal.directNotify.newCategory('DistributedEstateAI') def __init__(self, air): DistributedObjectAI.__init__(self, air) self.toons = [0, 0, 0, 0, 0, 0] self.items = [[], [], [], [], [], []] self.estateType = 0 self.cloudType = 0 self.dawnTime = 0 self.lastEpochTimestamp = 0 self.rentalTimestamp = 0 self.houses = [None] * 6 self.rentalType = 0 self.rentalHandle = None self.pond = None self.jukebox = None self.spots = [] self.butterflies = [] self.owner = None self.gardenManager = GardenManager(self) self.__pendingGardens = {} @property def hostId(self): return 1000000001 def generate(self): DistributedObjectAI.generate(self) self.pond = DistributedFishingPondAI(simbase.air) self.pond.setArea(ToontownGlobals.MyEstate) self.pond.generateWithRequired(self.zoneId) self.pond.start() treasureType, healAmount, spawnPoints, spawnRate, maxTreasures = TreasureGlobals.SafeZoneTreasureSpawns[ToontownGlobals.MyEstate] self.treasurePlanner = SZTreasurePlannerAI(self.zoneId, treasureType, healAmount, spawnPoints, spawnRate, maxTreasures) self.treasurePlanner.start() spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(49.1029, -124.805, 0.344704, 90, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(46.5222, -134.739, 0.390713, 75, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(41.31, -144.559, 0.375978, 45, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(46.8254, -113.682, 0.46015, 135, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) self.jukebox = DistributedPartyJukeboxActivityAI(self.air, self.doId, (0, 0, 0, 0)) self.jukebox.generateWithRequired(self.zoneId) self.jukebox.sendUpdate('setX', [-21.8630]) self.jukebox.sendUpdate('setY', [-154.669]) self.jukebox.sendUpdate('setH', [148.7050]) self.jukebox.sendUpdate('unloadSign') ButterflyGlobals.generateIndexes(self.zoneId, ButterflyGlobals.ESTATE) for i in xrange(0, ButterflyGlobals.NUM_BUTTERFLY_AREAS[ButterflyGlobals.ESTATE]): for j in xrange(0, ButterflyGlobals.NUM_BUTTERFLIES[ButterflyGlobals.ESTATE]): butterfly = DistributedButterflyAI.DistributedButterflyAI(self.air, ButterflyGlobals.ESTATE, i, self.zoneId) butterfly.generateWithRequired(self.zoneId) butterfly.start() self.butterflies.append(butterfly) def destroy(self): for house in self.houses: if house: house.requestDelete() for butterfly in self.butterflies: if butterfly: butterfly.requestDelete() del self.houses[:] if self.pond: for spot in self.spots: spot.requestDelete() self.spots = [] self.pond.requestDelete() self.pond = None if self.jukebox: self.jukebox.requestDelete() if self.treasurePlanner: self.treasurePlanner.stop() self.gardenManager.destroy() if self.rentalHandle: self.rentalHandle.destroy() self.rentalHandle = None self.requestDelete() def addDistObj(self, distObj): self.doId2do[distObj.doId] = distObj def setClientReady(self): self.sendUpdate('setEstateReady', []) def setEstateType(self, type): self.estateType = type def d_setEstateType(self, type): self.sendUpdate('setEstateType', [type]) def b_setEstateType(self, type): self.setEstateType(type) self.d_setEstateType(type) def getEstateType(self): return self.estateType def requestServerTime(self): avId = self.air.getAvatarIdFromSender() self.sendUpdateToAvatarId(avId, 'setServerTime', [time.time() % HouseGlobals.DAY_NIGHT_PERIOD]) def setDawnTime(self, dawnTime): self.dawnTime = dawnTime def d_setDawnTime(self, dawnTime): self.sendUpdate('setDawnTime', [dawnTime]) def b_setDawnTime(self, dawnTime): self.setDawnTime(dawnTime) self.d_setDawnTime(dawnTime) def getDawnTime(self): return self.dawnTime def setLastEpochTimeStamp(self, last): self.lastEpochTimestamp = last def d_setLastEpochTimeStamp(self, last): self.sendUpdate('setLastEpochTimeStamp', [last]) def b_setLastEpochTimeStamp(self, last): self.setLastEpochTimeStamp(last) self.d_setLastEpochTimeStamp(last) def getLastEpochTimeStamp(self): return self.lastEpochTimestamp def setRentalTimeStamp(self, rental): self.rentalTimestamp = rental def d_setRentalTimeStamp(self, rental): self.sendUpdate('setRentalTimeStamp', [rental]) def b_setRentalTimeStamp(self, rental): self.setRentalTimeStamp(rental) self.d_setRentalTimeStamp(rental) def getRentalTimeStamp(self): return self.rentalTimestamp def b_setRentalType(self, type): self.d_setRentalType(type) self.setRentalType(type) def d_setRentalType(self, type): self.sendUpdate('setRentalType', [type]) def setRentalType(self, type): expirestamp = self.getRentalTimeStamp() if expirestamp == 0: expire = 0 else: expire = int(expirestamp - time.time()) if expire < 0: self.rentalType = 0 self.d_setRentalType(0) self.b_setRentalTimeStamp(0) else: if self.rentalType == type: return self.rentalType = type if self.rentalHandle: self.rentalHandle.destroy() self.rentalHandle = None if self.rentalType == ToontownGlobals.RentalCannon: self.rentalHandle = CannonRental(self) else: self.notify.warning('Unknown rental %s' % self.rentalType) return self.rentalHandle.generateObjects() def getRentalType(self): return self.rentalType def rentItem(self, rentType, duration): self.b_setRentalTimeStamp(time.time() + duration * 60) self.b_setRentalType(rentType) def setSlot0ToonId(self, id): self.toons[0] = id def d_setSlot0ToonId(self, id): self.sendUpdate('setSlot0ToonId', [id]) def b_setSlot0ToonId(self, id): self.setSlot0ToonId(id) self.d_setSlot0ToonId(id) def getSlot0ToonId(self): return self.toons[0] def setSlot0Items(self, items): self.items[0] = items def d_setSlot0Items(self, items): self.sendUpdate('setSlot5Items', [items]) def b_setSlot0Items(self, items): self.setSlot0Items(items) self.d_setSlot0Items(items) def getSlot0Items(self): return self.items[0] def setSlot1ToonId(self, id): self.toons[1] = id def d_setSlot1ToonId(self, id): self.sendUpdate('setSlot1ToonId', [id]) def b_setSlot1ToonId(self, id): self.setSlot1ToonId(id) self.d_setSlot1ToonId(id) def getSlot1ToonId(self): return self.toons[1] def setSlot1Items(self, items): self.items[1] = items def d_setSlot1Items(self, items): self.sendUpdate('setSlot2Items', [items]) def b_setSlot1Items(self, items): self.setSlot2Items(items) self.d_setSlot2Items(items) def getSlot1Items(self): return self.items[1] def setSlot2ToonId(self, id): self.toons[2] = id def d_setSlot2ToonId(self, id): self.sendUpdate('setSlot2ToonId', [id]) def b_setSlot2ToonId(self, id): self.setSlot2ToonId(id) self.d_setSlot2ToonId(id) def getSlot2ToonId(self): return self.toons[2] def setSlot2Items(self, items): self.items[2] = items def d_setSlot2Items(self, items): self.sendUpdate('setSlot2Items', [items]) def b_setSlot2Items(self, items): self.setSlot2Items(items) self.d_setSlot2Items(items) def getSlot2Items(self): return self.items[2] def setSlot3ToonId(self, id): self.toons[3] = id def d_setSlot3ToonId(self, id): self.sendUpdate('setSlot3ToonId', [id]) def b_setSlot3ToonId(self, id): self.setSlot3ToonId(id) self.d_setSlot3ToonId(id) def getSlot3ToonId(self): return self.toons[3] def setSlot3Items(self, items): self.items[3] = items def d_setSlot3Items(self, items): self.sendUpdate('setSlot3Items', [items]) def b_setSlot3Items(self, items): self.setSlot3Items(items) self.d_setSlot3Items(items) def getSlot3Items(self): return self.items[3] def setSlot4ToonId(self, id): self.toons[4] = id def d_setSlot4ToonId(self, id): self.sendUpdate('setSlot4ToonId', [id]) def b_setSlot5ToonId(self, id): self.setSlot4ToonId(id) self.d_setSlot4ToonId(id) def getSlot4ToonId(self): return self.toons[4] def setSlot4Items(self, items): self.items[4] = items def d_setSlot4Items(self, items): self.sendUpdate('setSlot4Items', [items]) def b_setSlot4Items(self, items): self.setSlot4Items(items) self.d_setSlot4Items(items) def getSlot4Items(self): return self.items[4] def setSlot5ToonId(self, id): self.toons[5] = id def d_setSlot5ToonId(self, id): self.sendUpdate('setSlot5ToonId', [id]) def b_setSlot5ToonId(self, id): self.setSlot5ToonId(id) self.d_setSlot5ToonId(id) def getSlot5ToonId(self): return self.toons[5] def setSlot5Items(self, items): self.items[5] = items def d_setSlot5Items(self, items): self.sendUpdate('setSlot5Items', [items]) def b_setSlot5Items(self, items): self.setSlot5Items(items) self.d_setSlot5Items(items) def getSlot5Items(self): return self.items[5] def setIdList(self, idList): for i in xrange(len(idList)): if i >= 6: return self.toons[i] = idList[i] def d_setIdList(self, idList): self.sendUpdate('setIdList', [idList]) def b_setIdList(self, idList): self.setIdList(idList) self.d_setIdLst(idList) def completeFlowerSale(self, flag): if not flag: return avId = self.air.getAvatarIdFromSender() av = self.air.doId2do.get(avId) if not av: return collection = av.flowerCollection earning = 0 newSpecies = 0 for flower in av.flowerBasket.getFlower(): if collection.collectFlower(flower) == GardenGlobals.COLLECT_NEW_ENTRY: newSpecies += 1 earning += flower.getValue() av.b_setFlowerBasket([], []) av.d_setFlowerCollection(*av.flowerCollection.getNetLists()) av.addMoney(earning) oldSpecies = len(collection) - newSpecies dt = abs(len(collection) // 10 - oldSpecies // 10) if dt: self.notify.info('%d is getting a gardening trophy!' % avId) maxHp = av.getMaxHp() maxHp = min(ToontownGlobals.MaxHpLimit, maxHp + dt) av.b_setMaxHp(maxHp) av.toonUp(maxHp) self.sendUpdate('awardedTrophy', [avId]) av.b_setGardenTrophies(range(len(collection) // 10)) def completeFishSale(self): avId = self.air.getAvatarIdFromSender() av = self.air.doId2do.get(avId) if not av: return if self.air.fishManager.creditFishTank(av): self.sendUpdateToAvatarId(avId, 'thankSeller', [ToontownGlobals.FISHSALE_TROPHY, len(av.fishCollection), FishGlobals.getTotalNumFish()]) else: self.sendUpdateToAvatarId(avId, 'thankSeller', [ToontownGlobals.FISHSALE_COMPLETE, 0, 0]) def setClouds(self, clouds): self.cloudType = clouds def d_setClouds(self, clouds): self.sendUpdate('setClouds', [clouds]) def b_setClouds(self, clouds): self.setClouds(clouds) self.d_setClouds(clouds) def getClouds(self): return self.cloudType # Garden methods def getToonSlot(self, avId): if avId not in self.toons: return return self.toons.index(avId) def setSlot0Garden(self, flag): self.__pendingGardens[0] = flag def setSlot1Garden(self, flag): self.__pendingGardens[1] = flag def setSlot2Garden(self, flag): self.__pendingGardens[2] = flag def setSlot3Garden(self, flag): self.__pendingGardens[3] = flag def setSlot4Garden(self, flag): self.__pendingGardens[4] = flag def setSlot5Garden(self, flag): self.__pendingGardens[5] = flag def placeStarterGarden(self, avId, record=1): av = self.air.doId2do.get(avId) if not av: return slot = self.getToonSlot(avId) if slot is None: return if record: av.b_setGardenStarted(1) self.sendUpdate('setSlot%dGarden' % slot, ['started']) self.notify.info('placeStarterGarden %d %d' % (avId, slot)) self.gardenManager.handleSingleGarden(avId) def announceGenerate(self): DistributedObjectAI.announceGenerate(self) self.sendUpdate('setIdList', [self.toons]) for index, started in self.__pendingGardens.items(): if started: self.gardenManager.handleSingleGarden(self.toons[index]) self.__pendingGardens = {} if config.GetBool('fake-garden-started-ai', False): self.placeStarterGarden(100000002, 0)
class DistributedEstateAI(DistributedObjectAI): notify = DirectNotifyGlobal.directNotify.newCategory('DistributedEstateAI') def __init__(self, air): DistributedObjectAI.__init__(self, air) self.toons = [0, 0, 0, 0, 0, 0] self.items = [[], [], [], [], [], []] self.decorData = [] self.estateType = 0 self.cloudType = 0 self.dawnTime = 0 self.lastEpochTimestamp = 0 self.rentalTimestamp = 0 self.houses = [None] * 6 self.gardenBoxes = [[]] * 6 self.gardenPlots = [[]] * 6 self.pond = None self.spots = [] self.jukebox = None self.targets = [] self.cannons = [] self.target = None self.treasures = [] self.treasureIds = [] self.pets = [] self.owner = None self.gardenManager = GardenManager(self) self.pendingGardens = {} @property def hostId(self): return 1000000001 def generate(self): DistributedObjectAI.generate(self) self.pond = DistributedFishingPondAI(simbase.air) self.pond.setArea(ToontownGlobals.MyEstate) self.pond.generateWithRequired(self.zoneId) for i in xrange( FishingTargetGlobals.getNumTargets(ToontownGlobals.MyEstate)): target = DistributedFishingTargetAI(self.air) target.setPondDoId(self.pond.getDoId()) target.generateWithRequired(self.zoneId) self.targets.append(target) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(49.1029, -124.805, 0.344704, 90, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(46.5222, -134.739, 0.390713, 75, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(41.31, -144.559, 0.375978, 45, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(46.8254, -113.682, 0.46015, 135, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) self.createTreasurePlanner() self.jukebox = DistributedPartyJukebox40ActivityAI.DistributedPartyJukebox40ActivityAI( self.air, self.doId, (0, 0, 0, 0)) self.jukebox.generateWithRequired(self.zoneId) self.jukebox.sendUpdate('setX', [118]) self.jukebox.sendUpdate('setY', [-18]) self.jukebox.sendUpdate('setH', [-80]) doIds = [] for i in range(40): x = random.randint(100, 300) - 200 y = random.randint(100, 300) - 200 treasure = DistributedTreasureAI.DistributedTreasureAI( self.air, self, 8, x, y, 35) treasure.generateWithRequired(self.zoneId) self.treasures.append(treasure) doIds.append(treasure.doId) self.setTreasureIds(doIds) def grabAttempt(self, avId, treasureId): av = self.air.doId2do.get(avId) if not av: return treasure = self.air.doId2do.get(treasureId) if av.getMaxHp() != av.getHp(): av.toonUp(5) treasure.d_setGrab(avId) treasure.requestDelete() else: treasure.d_setReject() def announceGenerate(self): DistributedObjectAI.announceGenerate(self) self.sendUpdate('setIdList', [self.toons]) for index, started in self.pendingGardens.items(): if started: self.gardenManager.handleSingleGarden(self.toons[index]) self.pendingGardens = {} def destroy(self): for house in self.houses: if house: house.requestDelete() self.houses = [] if self.pond: self.pond.requestDelete() for spot in self.spots: spot.requestDelete() self.spots = [] for treasure in self.treasures: if not treasure.isDeleted(): treasure.requestDelete() for pet in self.pets: pet.requestDelete() if self.jukebox: self.jukebox.requestDelete() if self.treasurePlanner: self.treasurePlanner.stop() if self.gardenManager: self.gardenManager.destroy() self.requestDelete() def setEstateReady(self): pass def setClientReady(self): self.sendUpdate('setEstateReady', []) def setEstateType(self, type): self.estateType = type def d_setEstateType(self, type): self.sendUpdate('setEstateType', [type]) def b_setEstateType(self, type): self.setEstateType(type) self.d_setEstateType(type) def getEstateType(self): return self.estateType def setClosestHouse(self, todo0): pass def setTreasureIds(self, doIds): self.treasureIds = doIds self.sendUpdate('setTreasureIds', [doIds]) def createTreasurePlanner(self): treasureType, healAmount, spawnPoints, spawnRate, maxTreasures = TreasureGlobals.SafeZoneTreasureSpawns[ ToontownGlobals.MyEstate] self.treasurePlanner = SZTreasurePlannerAI(self.zoneId, treasureType, healAmount, spawnPoints, spawnRate, maxTreasures) self.treasurePlanner.start() def initPets(self, owner): def _queryAccount(dclass, fields): avatarList = fields['ACCOUNT_AV_SET'] def _queryToon(dclass, fields): petId, = fields['setPetId'] if not petId: return self.air.sendActivate( petId, self.air.districtId, self.zoneId, dclass=self.air.dclassesByName['DistributedPetAI']) self.pets.append(petId) for avId in avatarList: if not avId: continue self.air.dbInterface.queryObject(self.air.dbId, avId, callback=_queryToon) self.air.dbInterface.queryObject(self.air.dbId, owner.DISLid, callback=_queryAccount) def destroyPet(self, owner): for petId in self.pets: if owner != self.air.doId2do.get(petId): return self.air.getActivated(petId, self.__handleGetPetActivated) def __handleGetPetActivated(self, doId, activated): if not activated or doId not in self.air.doId2do.keys(): return self.air.doId2do[doId].requestDelete() def requestServerTime(self): self.sendUpdateToAvatarId( self.air.getAvatarIdFromSender(), 'setServerTime', [time.time() % HouseGlobals.DAY_NIGHT_PERIOD]) def setServerTime(self, todo0): pass def setDawnTime(self, dawnTime): self.dawnTime = dawnTime def d_setDawnTime(self, dawnTime): self.sendUpdate('setDawnTime', [dawnTime]) def b_setDawnTime(self, dawnTime): self.setDawnTime(dawnTime) self.d_setDawnTime(dawnTime) def getDawnTime(self): return self.dawnTime def placeOnGround(self, todo0): pass def setDecorData(self, decorData): self.decorData = decorData def d_setDecorData(self, decorData): self.sendUpdate('setDecorData', [decorData]) def b_setDecorData(self, decorData): self.setDecorData(decorData) self.d_setDecorData(decorData) def getDecorData(self): return self.decorData def setLastEpochTimeStamp(self, last): self.lastEpochTimestamp = last def d_setLastEpochTimeStamp(self, last): self.sendUpdate('setLastEpochTimeStamp', [last]) def b_setLastEpochTimeStamp(self, last): self.setLastEpochTimeStamp(last) self.d_setLastEpochTimeStamp(last) def getLastEpochTimeStamp(self): return self.lastEpochTimestamp def setRentalTimeStamp(self, rental): self.rentalTimestamp = rental def d_setRentalTimeStamp(self, rental): self.sendUpdate('setRentalTimeStamp', [rental]) def b_setRentalTimeStamp(self, rental): self.setRentalTimeStamp(self, rental) self.b_setRentalTimeStamp(self, rental) def getRentalTimeStamp(self): return self.rentalTimestamp def setRentalType(self, todo0): pass def getRentalType(self): return 0 def setSlot0ToonId(self, id): self.toons[0] = id def d_setSlot0ToonId(self, id): self.sendUpdate('setSlot0ToonId', [id]) def b_setSlot0ToonId(self, id): self.setSlot0ToonId(id) self.d_setSlot0ToonId(id) def getSlot0ToonId(self): return self.toons[0] def setSlot0Items(self, items): self.items[0] = items def d_setSlot0Items(self, items): self.sendUpdate('setSlot5Items', [items]) def b_setSlot0Items(self, items): self.setSlot0Items(items) self.d_setSlot0Items(items) def getSlot0Items(self): return self.items[0] def setSlot1ToonId(self, id): self.toons[1] = id def d_setSlot1ToonId(self, id): self.sendUpdate('setSlot1ToonId', [id]) def b_setSlot1ToonId(self, id): self.setSlot1ToonId(id) self.d_setSlot1ToonId(id) def getSlot1ToonId(self): return self.toons[1] def setSlot1Items(self, items): self.items[1] = items def d_setSlot1Items(self, items): self.sendUpdate('setSlot2Items', [items]) def b_setSlot1Items(self, items): self.setSlot2Items(items) self.d_setSlot2Items(items) def getSlot1Items(self): return self.items[1] def setSlot2ToonId(self, id): self.toons[2] = id def d_setSlot2ToonId(self, id): self.sendUpdate('setSlot2ToonId', [id]) def b_setSlot2ToonId(self, id): self.setSlot2ToonId(id) self.d_setSlot2ToonId(id) def getSlot2ToonId(self): return self.toons[2] def setSlot2Items(self, items): self.items[2] = items def d_setSlot2Items(self, items): self.sendUpdate('setSlot2Items', [items]) def b_setSlot2Items(self, items): self.setSlot2Items(items) self.d_setSlot2Items(items) def getSlot2Items(self): return self.items[2] def setSlot3ToonId(self, id): self.toons[3] = id def d_setSlot3ToonId(self, id): self.sendUpdate('setSlot3ToonId', [id]) def b_setSlot3ToonId(self, id): self.setSlot3ToonId(id) self.d_setSlot3ToonId(id) def getSlot3ToonId(self): return self.toons[3] def setSlot3Items(self, items): self.items[3] = items def d_setSlot3Items(self, items): self.sendUpdate('setSlot3Items', [items]) def b_setSlot3Items(self, items): self.setSlot3Items(items) self.d_setSlot3Items(items) def getSlot3Items(self): return self.items[3] def setSlot4ToonId(self, id): self.toons[4] = id def d_setSlot4ToonId(self, id): self.sendUpdate('setSlot4ToonId', [id]) def b_setSlot5ToonId(self, id): self.setSlot4ToonId(id) self.d_setSlot4ToonId(id) def getSlot4ToonId(self): return self.toons[4] def setSlot4Items(self, items): self.items[4] = items def d_setSlot4Items(self, items): self.sendUpdate('setSlot4Items', [items]) def b_setSlot4Items(self, items): self.setSlot4Items(items) self.d_setSlot4Items(items) def getSlot4Items(self): return self.items[4] def setSlot5ToonId(self, id): self.toons[5] = id def d_setSlot5ToonId(self, id): self.sendUpdate('setSlot5ToonId', [id]) def b_setSlot5ToonId(self, id): self.setSlot5ToonId(id) self.d_setSlot5ToonId(id) def getSlot5ToonId(self): return self.toons[5] def setSlot5Items(self, items): self.items[5] = items def d_setSlot5Items(self, items): self.sendUpdate('setSlot5Items', [items]) def b_setSlot5Items(self, items): self.setSlot5Items(items) self.d_setSlot5Items(items) def getSlot5Items(self): return self.items[5] def setIdList(self, idList): for i in xrange(len(idList)): if i >= 6: return self.toons[i] = idList[i] def d_setIdList(self, idList): self.sendUpdate('setIdList', [idList]) def b_setIdList(self, idList): self.setIdList(idList) self.d_setIdLst(idList) def completeFlowerSale(self, flag): if not flag: return avId = self.air.getAvatarIdFromSender() av = self.air.doId2do.get(avId) if not av: return collection = av.flowerCollection earning = 0 newSpecies = 0 for flower in av.flowerBasket.getFlower(): if collection.collectFlower( flower) == GardenGlobals.COLLECT_NEW_ENTRY: newSpecies += 1 earning += flower.getValue() av.b_setFlowerBasket([], []) av.d_setFlowerCollection(*av.flowerCollection.getNetLists()) av.addMoney(earning) oldSpecies = len(collection) - newSpecies dt = abs(len(collection) // 10 - oldSpecies // 10) if dt: maxHp = av.getMaxHp() maxHp = min(ToontownGlobals.MaxHpLimit, maxHp + dt) av.b_setMaxHp(maxHp) av.toonUp(maxHp) self.sendUpdate('awardedTrophy', [avId]) av.b_setGardenTrophies(range(len(collection) // 10)) def awardedTrophy(self, todo0): pass def setClouds(self, clouds): self.cloudType = clouds def d_setClouds(self, clouds): self.sendUpdate('setClouds', [clouds]) def b_setClouds(self, clouds): self.setClouds(clouds) self.d_setClouds(clouds) def getClouds(self): return self.cloudType def cannonsOver(self): pass def gameTableOver(self): pass def addDistObj(self, distObj): self.doId2do[distObj.doId] = distObj def updateToons(self): self.d_setSlot0ToonId(self.toons[0]) self.d_setSlot1ToonId(self.toons[1]) self.d_setSlot2ToonId(self.toons[2]) self.d_setSlot3ToonId(self.toons[3]) self.d_setSlot4ToonId(self.toons[4]) self.d_setSlot5ToonId(self.toons[5]) self.sendUpdate('setIdList', [self.toons]) def updateItems(self): self.d_setSlot0Items(self.items[0]) self.d_setSlot1Items(self.items[1]) self.d_setSlot2Items(self.items[2]) self.d_setSlot3Items(self.items[3]) self.d_setSlot4Items(self.items[4]) self.d_setSlot5Items(self.items[5]) def getToonSlot(self, avId): if avId not in self.toons: return return self.toons.index(avId) def setSlot0Garden(self, flag): self.pendingGardens[0] = flag def setSlot1Garden(self, flag): self.pendingGardens[1] = flag def setSlot2Garden(self, flag): self.pendingGardens[2] = flag def setSlot3Garden(self, flag): self.pendingGardens[3] = flag def setSlot4Garden(self, flag): self.pendingGardens[4] = flag def setSlot5Garden(self, flag): self.pendingGardens[5] = flag def placeStarterGarden(self, avId, record=1): av = self.air.doId2do.get(avId) if not av: return slot = self.getToonSlot(avId) if slot is None: return if record: av.b_setGardenStarted(1) self.sendUpdate('setSlot%dGarden' % slot, ['started']) self.notify.info('placeStarterGarden %d %d' % (avId, slot)) self.gardenManager.handleSingleGarden(avId)
class DistributedEstateAI(DistributedObjectAI): notify = directNotify.newCategory("DistributedEstateAI") def __init__(self, air): DistributedObjectAI.__init__(self, air) self.toons = [0, 0, 0, 0, 0, 0] self.estateType = 0 self.cloudType = 0 self.dawnTime = 0 self.lastEpochTimestamp = 0 self.rentalTimestamp = 0 self.houses = [None] * 6 self.pond = None self.spots = [] self.targets = [] self.owner = None def generate(self): DistributedObjectAI.generate(self) self.pond = DistributedFishingPondAI(self.air) self.pond.setArea(ToontownGlobals.MyEstate) self.pond.generateWithRequired(self.zoneId) self.pond.bingoMgr = DistributedPondBingoManagerAI(self.air) self.pond.bingoMgr.setPondDoId(self.pond.doId) self.pond.bingoMgr.generateWithRequired(self.zoneId) if self.air.holidayManager.isHolidayRunning( ToontownGlobals.FISH_BINGO_NIGHT): self.pond.bingoMgr.enableBingo() for i in xrange( FishingTargetGlobals.getNumTargets(ToontownGlobals.MyEstate)): target = DistributedFishingTargetAI(self.air) target.setPondDoId(self.pond.getDoId()) target.generateWithRequired(self.zoneId) self.targets.append(target) if simbase.config.GetBool('want-estate-fisherman', False): self.fisherman = NPCToons.createNPC(self.air, 91919, NPCToons.NPCToonDict[91919], self.zoneId) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(49.1029, -124.805, 0.344704, 90, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(46.5222, -134.739, 0.390713, 75, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(41.31, -144.559, 0.375978, 45, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(46.8254, -113.682, 0.46015, 135, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) self.createTreasurePlanner() def destroy(self): for house in self.houses: if house is not None: house.requestDelete() del self.houses[:] if self.pond is not None: self.pond.requestDelete() for spot in self.spots: spot.requestDelete() for target in self.targets: target.requestDelete() if self.treasurePlanner is not None: self.treasurePlanner.stop() if simbase.config.GetBool('want-estate-fisherman', False): self.fisherman.requestDelete() self.requestDelete() def setEstateReady(self): pass def setClientReady(self): self.sendUpdate('setEstateReady', []) def setEstateType(self, type): self.estateType = type def d_setEstateType(self, type): self.sendUpdate('setEstateType', [type]) def b_setEstateType(self, type): self.setEstateType(type) self.d_setEstateType(type) def getEstateType(self): return self.estateType def setClosestHouse(self, todo0): pass def setTreasureIds(self, todo0): pass def createTreasurePlanner(self): self.treasurePlanner = SZTreasurePlannerAI( self.zoneId, *TreasureGlobals.SafeZoneTreasureSpawns[ToontownGlobals.MyEstate]) self.treasurePlanner.start() def requestServerTime(self): avId = self.air.getAvatarIdFromSender() self.sendUpdateToAvatarId( avId, 'setServerTime', [time.time() % HouseGlobals.DAY_NIGHT_PERIOD]) def setServerTime(self, todo0): pass def setDawnTime(self, dawnTime): self.dawnTime = dawnTime def d_setDawnTime(self, dawnTime): self.sendUpdate('setDawnTime', [dawnTime]) def b_setDawnTime(self, dawnTime): self.setDawnTime(dawnTime) self.d_setDawnTime(dawnTime) def getDawnTime(self): return self.dawnTime def placeOnGround(self, todo0): pass def setLastEpochTimeStamp(self, last): self.lastEpochTimestamp = last def d_setLastEpochTimeStamp(self, last): self.sendUpdate('setLastEpochTimeStamp', [last]) def b_setLastEpochTimeStamp(self, last): self.setLastEpochTimeStamp(last) self.d_setLastEpochTimeStamp(last) def getLastEpochTimeStamp(self): return self.lastEpochTimestamp def setRentalTimeStamp(self, rental): self.rentalTimestamp = rental def d_setRentalTimeStamp(self, rental): self.sendUpdate('setRentalTimeStamp', [rental]) def b_setRentalTimeStamp(self, rental): self.setRentalTimeStamp(self, rental) self.b_setRentalTimeStamp(self, rental) def getRentalTimeStamp(self): return self.rentalTimestamp def setRentalType(self, todo0): pass def getRentalType(self): return 0 def setSlot0ToonId(self, id): self.toons[0] = id def d_setSlot0ToonId(self, id): self.sendUpdate('setSlot0ToonId', [id]) def b_setSlot0ToonId(self, id): self.setSlot0ToonId(id) self.d_setSlot0ToonId(id) def getSlot0ToonId(self): return self.toons[0] def setSlot1ToonId(self, id): self.toons[1] = id def d_setSlot1ToonId(self, id): self.sendUpdate('setSlot1ToonId', [id]) def b_setSlot1ToonId(self, id): self.setSlot1ToonId(id) self.d_setSlot1ToonId(id) def getSlot1ToonId(self): return self.toons[1] def setSlot2ToonId(self, id): self.toons[2] = id def d_setSlot2ToonId(self, id): self.sendUpdate('setSlot2ToonId', [id]) def b_setSlot2ToonId(self, id): self.setSlot2ToonId(id) self.d_setSlot2ToonId(id) def getSlot2ToonId(self): return self.toons[2] def setSlot3ToonId(self, id): self.toons[3] = id def d_setSlot3ToonId(self, id): self.sendUpdate('setSlot3ToonId', [id]) def b_setSlot3ToonId(self, id): self.setSlot3ToonId(id) self.d_setSlot3ToonId(id) def getSlot3ToonId(self): return self.toons[3] def setSlot4ToonId(self, id): self.toons[4] = id def d_setSlot4ToonId(self, id): self.sendUpdate('setSlot4ToonId', [id]) def b_setSlot5ToonId(self, id): self.setSlot4ToonId(id) self.d_setSlot4ToonId(id) def getSlot4ToonId(self): return self.toons[4] def setSlot5ToonId(self, id): self.toons[5] = id def d_setSlot5ToonId(self, id): self.sendUpdate('setSlot5ToonId', [id]) def b_setSlot5ToonId(self, id): self.setSlot5ToonId(id) self.d_setSlot5ToonId(id) def getSlot5ToonId(self): return self.toons[5] def setIdList(self, idList): for i in xrange(len(idList)): if i >= 6: return self.toons[i] = idList[i] def d_setIdList(self, idList): self.sendUpdate('setIdList', [idList]) def b_setIdList(self, idList): self.setIdList(idList) self.d_setIdLst(idList) def setClouds(self, clouds): self.cloudType = clouds def d_setClouds(self, clouds): self.sendUpdate('setClouds', [clouds]) def b_setClouds(self, clouds): self.setClouds(clouds) self.d_setClouds(clouds) def getClouds(self): return self.cloudType def cannonsOver(self): pass def gameTableOver(self): pass def placeStarterGarden(self, av): if av is None: return for house in self.houses: if house is not None: if house.getAvatarId() == av.doId: house.placeStarterGarden() return self.notify.warning( 'Avatar %s tried to place a starter garden when he didnt own a house!' % av.doId) def updateToons(self): self.d_setSlot0ToonId(self.toons[0]) self.d_setSlot1ToonId(self.toons[1]) self.d_setSlot2ToonId(self.toons[2]) self.d_setSlot3ToonId(self.toons[3]) self.d_setSlot4ToonId(self.toons[4]) self.d_setSlot5ToonId(self.toons[5]) self.sendUpdate('setIdList', [self.toons])
def createTreasurePlanner(self): self.treasurePlanner = SZTreasurePlannerAI( self.zoneId, *TreasureGlobals.SafeZoneTreasureSpawns[ToontownGlobals.MyEstate]) self.treasurePlanner.start()
class DistributedEstateAI(DistributedObjectAI): notify = DirectNotifyGlobal.directNotify.newCategory("DistributedEstateAI") def __init__(self, air): DistributedObjectAI.__init__(self, air) self.toons = [0, 0, 0, 0, 0, 0] self.items = [[], [], [], [], [], []] self.decorData = [] self.estateType = 0 # NOT SURE IF THIS HAS ANY USE BUT THANKS DISNEY self.cloudType = 0 self.dawnTime = 0 self.lastEpochTimestamp = 0 self.rentalTimestamp = 0 self.houses = [None] * 6 self.pond = None self.spots = [] self.targets = [] self.treasurePlanner = None self.owner = None def generate(self): DistributedObjectAI.generate(self) # Gone fishin' self.pond = DistributedFishingPondAI(simbase.air) self.pond.setArea(ToontownGlobals.MyEstate) self.pond.generateWithRequired(self.zoneId) for i in range(FishingTargetGlobals.getNumTargets(ToontownGlobals.MyEstate)): target = DistributedFishingTargetAI(self.air) target.setPondDoId(self.pond.getDoId()) target.generateWithRequired(self.zoneId) self.targets.append(target) for i in xrange(6): avItems = self.items[i] for item in avItems: type, hardPoint, waterLevel, growthLevel, optional = item if type == 2: # broken for now, rip boxes = GardenGlobals.estateBoxes[i] box = DistributedGardenBoxAI(self.air) box.setPlot(i) box.setOwnerIndex(i) box.setTypeIndex(boxes[hardPoint][3]) box.setPosition(boxes[hardPoint][0], boxes[hardPoint][1], 20) box.setHeading(boxes[hardPoint][2]) box.generateWithRequired(self.zoneId) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(49.1029, -124.805, 0.344704, 90, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(46.5222, -134.739, 0.390713, 75, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(41.31, -144.559, 0.375978, 45, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(46.8254, -113.682, 0.46015, 135, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) # Let's place some popsicles self.createTreasurePlanner() def rentItem(self, type, duration): pass # TODO - implement this def destroy(self): for house in self.houses: if house: house.requestDelete() del self.houses[:] if self.pond: self.pond.requestDelete() for spot in self.spots: spot.requestDelete() for target in self.targets: target.requestDelete() if self.treasurePlanner: self.treasurePlanner.stop() self.requestDelete() def setEstateReady(self): pass def setClientReady(self): self.sendUpdate('setEstateReady', []) def setEstateType(self, type): self.estateType = type def d_setEstateType(self, type): self.sendUpdate('setEstateType', [type]) def b_setEstateType(self, type): self.setEstateType(type) self.d_setEstateType(type) def getEstateType(self): return self.estateType def setClosestHouse(self, todo0): pass def setTreasureIds(self, todo0): pass def createTreasurePlanner(self): treasureType, healAmount, spawnPoints, spawnRate, maxTreasures = TreasureGlobals.SafeZoneTreasureSpawns[ToontownGlobals.MyEstate] self.treasurePlanner = SZTreasurePlannerAI(self.zoneId, treasureType, healAmount, spawnPoints, spawnRate, maxTreasures) self.treasurePlanner.start() def requestServerTime(self): avId = self.air.getAvatarIdFromSender() self.sendUpdateToAvatarId(avId, 'setServerTime', [time.time() % HouseGlobals.DAY_NIGHT_PERIOD]) def setServerTime(self, todo0): pass def setDawnTime(self, dawnTime): self.dawnTime = dawnTime def d_setDawnTime(self, dawnTime): self.sendUpdate('setDawnTime', [dawnTime]) def b_setDawnTime(self, dawnTime): self.setDawnTime(dawnTime) self.d_setDawnTime(dawnTime) def getDawnTime(self): return self.dawnTime def placeOnGround(self, todo0): pass def setDecorData(self, decorData): self.decorData = decorData def d_setDecorData(self, decorData): self.sendUpdate('setDecorData', [decorData]) def b_setDecorData(self, decorData): self.setDecorData(decorData) self.d_setDecorData(decorData) def getDecorData(self): return self.decorData def setLastEpochTimeStamp(self, last): #how do I do this self.lastEpochTimestamp = last def d_setLastEpochTimeStamp(self, last): self.sendUpdate('setLastEpochTimeStamp', [last]) def b_setLastEpochTimeStamp(self, last): self.setLastEpochTimeStamp(last) self.d_setLastEpochTimeStamp(last) def getLastEpochTimeStamp(self): return self.lastEpochTimestamp def setRentalTimeStamp(self, rental): self.rentalTimestamp = rental def d_setRentalTimeStamp(self, rental): self.sendUpdate('setRentalTimeStamp', [rental]) def b_setRentalTimeStamp(self, rental): self.setRentalTimeStamp(self, rental) self.b_setRentalTimeStamp(self, rental) def getRentalTimeStamp(self): return self.rentalTimestamp def setRentalType(self, todo0): pass def getRentalType(self): return 0 def setSlot0ToonId(self, id): self.toons[0] = id def d_setSlot0ToonId(self, id): self.sendUpdate('setSlot0ToonId', [id]) def b_setSlot0ToonId(self, id): self.setSlot0ToonId(id) self.d_setSlot0ToonId(id) def getSlot0ToonId(self): return self.toons[0] def setSlot0Items(self, items): self.items[0] = items def d_setSlot0Items(self, items): self.sendUpdate('setSlot5Items', [items]) def b_setSlot0Items(self, items): self.setSlot0Items(items) self.d_setSlot0Items(items) def getSlot0Items(self): return self.items[0] def setSlot1ToonId(self, id): self.toons[1] = id def d_setSlot1ToonId(self, id): self.sendUpdate('setSlot1ToonId', [id]) def b_setSlot1ToonId(self, id): self.setSlot1ToonId(id) self.d_setSlot1ToonId(id) def getSlot1ToonId(self): return self.toons[1] def setSlot1Items(self, items): self.items[1] = items def d_setSlot1Items(self, items): self.sendUpdate('setSlot2Items', [items]) def b_setSlot1Items(self, items): self.setSlot2Items(items) self.d_setSlot2Items(items) def getSlot1Items(self): return self.items[1] def setSlot2ToonId(self, id): self.toons[2] = id def d_setSlot2ToonId(self, id): self.sendUpdate('setSlot2ToonId', [id]) def b_setSlot2ToonId(self, id): self.setSlot2ToonId(id) self.d_setSlot2ToonId(id) def getSlot2ToonId(self): return self.toons[2] def setSlot2Items(self, items): self.items[2] = items def d_setSlot2Items(self, items): self.sendUpdate('setSlot2Items', [items]) def b_setSlot2Items(self, items): self.setSlot2Items(items) self.d_setSlot2Items(items) def getSlot2Items(self): return self.items[2] def setSlot3ToonId(self, id): self.toons[3] = id def d_setSlot3ToonId(self, id): self.sendUpdate('setSlot3ToonId', [id]) def b_setSlot3ToonId(self, id): self.setSlot3ToonId(id) self.d_setSlot3ToonId(id) def getSlot3ToonId(self): return self.toons[3] def setSlot3Items(self, items): self.items[3] = items def d_setSlot3Items(self, items): self.sendUpdate('setSlot3Items', [items]) def b_setSlot3Items(self, items): self.setSlot3Items(items) self.d_setSlot3Items(items) def getSlot3Items(self): return self.items[3] def setSlot4ToonId(self, id): self.toons[4] = id def d_setSlot4ToonId(self, id): self.sendUpdate('setSlot4ToonId', [id]) def b_setSlot5ToonId(self, id): self.setSlot4ToonId(id) self.d_setSlot4ToonId(id) def getSlot4ToonId(self): return self.toons[4] def setSlot4Items(self, items): self.items[4] = items def d_setSlot4Items(self, items): self.sendUpdate('setSlot4Items', [items]) def b_setSlot4Items(self, items): self.setSlot4Items(items) self.d_setSlot4Items(items) def getSlot4Items(self): return self.items[4] def setSlot5ToonId(self, id): self.toons[5] = id def d_setSlot5ToonId(self, id): self.sendUpdate('setSlot5ToonId', [id]) def b_setSlot5ToonId(self, id): self.setSlot5ToonId(id) self.d_setSlot5ToonId(id) def getSlot5ToonId(self): return self.toons[5] def setSlot5Items(self, items): self.items[5] = items def d_setSlot5Items(self, items): self.sendUpdate('setSlot5Items', [items]) def b_setSlot5Items(self, items): self.setSlot5Items(items) self.d_setSlot5Items(items) def getSlot5Items(self): return self.items[5] def setIdList(self, idList): for i in range(len(idList)): if i >= 6: return self.toons[i] = idList[i] def d_setIdList(self, idList): self.sendUpdate('setIdList', [idList]) def b_setIdList(self, idList): self.setIdList(idList) self.d_setIdLst(idList) def completeFlowerSale(self, todo0): pass def awardedTrophy(self, todo0): pass def setClouds(self, clouds): self.cloudType = clouds def d_setClouds(self, clouds): self.sendUpdate('setClouds', [clouds]) def b_setClouds(self, clouds): self.setClouds(clouds) self.d_setClouds(clouds) def getClouds(self): return self.cloudType def cannonsOver(self): pass def gameTableOver(self): pass def updateToons(self): self.d_setSlot0ToonId(self.toons[0]) self.d_setSlot1ToonId(self.toons[1]) self.d_setSlot2ToonId(self.toons[2]) self.d_setSlot3ToonId(self.toons[3]) self.d_setSlot4ToonId(self.toons[4]) self.d_setSlot5ToonId(self.toons[5]) self.sendUpdate('setIdList', [self.toons]) def updateItems(self): self.d_setSlot0Items(self.items[0]) self.d_setSlot1Items(self.items[1]) self.d_setSlot2Items(self.items[2]) self.d_setSlot3Items(self.items[3]) self.d_setSlot4Items(self.items[4]) self.d_setSlot5Items(self.items[5]) def placeStarterGarden(self, avatar): items = [] if avatar.getGardenStarted(): return avId = avatar.getDoId() houseIndex = self.toons.index(avId) plots = GardenGlobals.estatePlots[houseIndex] boxes = GardenGlobals.estateBoxes[houseIndex] for i in xrange(len(boxes)): items.append([2, i, 0, 0, 0]) box = DistributedGardenBoxAI(self.air) box.setPlot(i) box.setOwnerIndex(houseIndex) box.setTypeIndex(boxes[i][3]) box.setPosition(boxes[i][0], boxes[i][1], 20) box.setHeading(boxes[i][2]) box.generateWithRequired(self.zoneId) for i in xrange(len(plots)): items.append([1, i, 0, 0, 0]) plot = DistributedGardenPlotAI(self.air) plot.setPlot(i) plot.setOwnerIndex(houseIndex) if plots[i][3] != GardenGlobals.FLOWER_TYPE: plot.setPosition(plots[i][0], plots[i][1], 20) plot.setHeading(plots[i][2]) plot.generateWithRequired(self.zoneId) self.items[houseIndex] = items self.updateItems() avatar.b_setGardenStarted(1)
def createTreasurePlanner(self): treasureType, healAmount, spawnPoints, spawnRate, maxTreasures = TreasureGlobals.SafeZoneTreasureSpawns[ToontownGlobals.MyEstate] self.treasurePlanner = SZTreasurePlannerAI(self.zoneId, treasureType, healAmount, spawnPoints, spawnRate, maxTreasures) self.treasurePlanner.start()
class HoodAI: notify = directNotify.newCategory('HoodAI') notify.setInfo(True) def __init__(self, air, zoneId, canonicalHoodId): self.air = air self.zoneId = zoneId self.canonicalHoodId = canonicalHoodId self.fishingPonds = [] self.partyGates = [] self.treasurePlanner = None self.buildingManagers = [] self.suitPlanners = [] for zoneId in self.getZoneTable(): self.notify.info('Creating objects... ' + self.getLocationName(zoneId)) dnaFileName = self.air.lookupDNAFileName(zoneId) dnaStore = DNAStorage() dnaData = simbase.air.loadDNAFileAI(dnaStore, dnaFileName) self.air.dnaStoreMap[zoneId] = dnaStore self.air.dnaDataMap[zoneId] = dnaData def getZoneTable(self): zoneTable = [self.zoneId] zoneTable.extend( ToontownGlobals.HoodHierarchy.get(self.canonicalHoodId, [])) return zoneTable def getLocationName(self, zoneId): lookupTable = ToontownGlobals.hoodNameMap isStreet = (zoneId % 1000) != 0 if isStreet: lookupTable = TTLocalizer.GlobalStreetNames name = lookupTable.get(zoneId, '') if isStreet: return '%s, %s' % (self.getLocationName(self.zoneId), name[2]) return name[2] def startup(self): if self.air.wantFishing: self.createFishingPonds() if self.air.wantParties: self.createPartyPeople() if simbase.config.GetBool('want-treasure-planners', True): self.createTreasurePlanner() self.createBuildingManagers() if simbase.config.GetBool('want-suit-planners', True): self.createSuitPlanners() if simbase.air.wantHalloween or simbase.air.holidayManager.isHolidayRunning( ToontownGlobals.TRICK_OR_TREAT): self.startupTrickOrTreat() if simbase.air.wantChristmas or simbase.air.holidayManager.isHolidayRunning( ToontownGlobals.WINTER_CAROLING): self.startupWinterCaroling() if simbase.air.wantFireworks: self.generateFireworkShow() def shutdown(self): if self.treasurePlanner: self.treasurePlanner.stop() self.treasurePlanner.deleteAllTreasuresNow() self.treasurePlanner = None for suitPlanner in self.suitPlanners: suitPlanner.requestDelete() del self.air.suitPlanners[suitPlanner.zoneId] self.suitPlanners = [] for buildingManager in self.buildingManagers: buildingManager.cleanup() del self.air.buildingManagers[buildingManager.branchId] self.buildingManagers = [] del self.fishingPonds for distObj in list(self.doId2do.values()): distObj.requestDelete() def findFishingPonds(self, dnaGroup, zoneId, area): fishingPonds = [] fishingPondGroups = [] if isinstance(dnaGroup, DNAGroup) and ('fishing_pond' in dnaGroup.getName()): fishingPondGroups.append(dnaGroup) fishingPond = DistributedFishingPondAI(simbase.air) fishingPond.setArea(area) fishingPond.generateWithRequired(zoneId) fishingPond.start() fishingPonds.append(fishingPond) elif isinstance(dnaGroup, DNAVisGroup): zoneId = ZoneUtil.getTrueZoneId( int(dnaGroup.getName().split(':')[0]), zoneId) for i in range(dnaGroup.getNumChildren()): (foundFishingPonds, foundFishingPondGroups) = self.findFishingPonds( dnaGroup.at(i), zoneId, area) fishingPonds.extend(foundFishingPonds) fishingPondGroups.extend(foundFishingPondGroups) return (fishingPonds, fishingPondGroups) def findFishingSpots(self, dnaGroup, fishingPond): fishingSpots = [] if isinstance(dnaGroup, DNAGroup) and ('fishing_spot' in dnaGroup.getName()): fishingSpot = DistributedFishingSpotAI(simbase.air) fishingSpot.setPondDoId(fishingPond.doId) x, y, z = dnaGroup.getPos() h, p, r = dnaGroup.getHpr() fishingSpot.setPosHpr(x, y, z, h, p, r) fishingSpot.generateWithRequired(fishingPond.zoneId) fishingSpots.append(fishingSpot) for i in range(dnaGroup.getNumChildren()): foundFishingSpots = self.findFishingSpots(dnaGroup.at(i), fishingPond) fishingSpots.extend(foundFishingSpots) return fishingSpots 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( fishingPond.zoneId ) # Was using self.zoneId, this only generated the bingo managers in playgrounds, causing an exception when entering street ponds def findPartyGates(self, dnaGroup, zoneId): partyGates = [] if isinstance(dnaGroup, DNAGroup) and ('prop_party_gate' in dnaGroup.getName()): partyGate = DistributedPartyGateAI(simbase.air) partyGate.setArea(zoneId) partyGate.generateWithRequired(zoneId) partyGates.append(partyGates) for i in range(dnaGroup.getNumChildren()): foundPartyGates = self.findPartyGates(dnaGroup.at(i), zoneId) partyGates.extend(foundPartyGates) return partyGates def createPartyPeople(self): self.partyGates = [] for zoneId in self.getZoneTable(): dnaData = self.air.dnaDataMap.get(zoneId, None) zoneId = ZoneUtil.getTrueZoneId(zoneId, self.zoneId) if dnaData.getName() == 'root': foundPartyGates = self.findPartyGates(dnaData, zoneId) self.partyGates.extend(foundPartyGates) def createTreasurePlanner(self): spawnInfo = TreasureGlobals.SafeZoneTreasureSpawns.get( self.canonicalHoodId) if not spawnInfo: return treasureType, healAmount, spawnPoints, spawnRate, maxTreasures = spawnInfo self.treasurePlanner = SZTreasurePlannerAI(self.canonicalHoodId, treasureType, healAmount, spawnPoints, spawnRate, maxTreasures) self.treasurePlanner.start() def createBuildingManagers(self): for zoneId in self.getZoneTable(): dnaStore = self.air.dnaStoreMap[zoneId] zoneId = ZoneUtil.getTrueZoneId(zoneId, self.zoneId) buildingManager = DistributedBuildingMgrAI.DistributedBuildingMgrAI( self.air, zoneId, dnaStore, self.air.trophyMgr) self.buildingManagers.append(buildingManager) self.air.buildingManagers[zoneId] = buildingManager def createSuitPlanners(self): for zoneId in self.getZoneTable(): if zoneId == self.zoneId: continue zoneId = ZoneUtil.getTrueZoneId(zoneId, self.zoneId) suitPlanner = DistributedSuitPlannerAI.DistributedSuitPlannerAI( self.air, zoneId) suitPlanner.generateWithRequired(zoneId) suitPlanner.d_setZoneId(zoneId) suitPlanner.initTasks() self.suitPlanners.append(suitPlanner) self.air.suitPlanners[zoneId] = suitPlanner def startupTrickOrTreat(self): if hasattr(self, 'TrickOrTreatManager'): return if self.canonicalHoodId in HOLIDAY_SHOPKEEPER_ZONES[ ToontownGlobals.TRICK_OR_TREAT]: self.TrickOrTreatManager = DistributedTrickOrTreatTargetAI.DistributedTrickOrTreatTargetAI( self.air) self.TrickOrTreatManager.generateWithRequired( HOLIDAY_SHOPKEEPER_ZONES[ToontownGlobals.TRICK_OR_TREAT][ self.canonicalHoodId]) def endTrickOrTreat(self): if hasattr(self, 'TrickOrTreatManager'): self.TrickOrTreatManager.requestDelete() del self.TrickOrTreatManager def startupWinterCaroling(self): if hasattr(self, 'WinterCarolingManager'): return if self.canonicalHoodId in HOLIDAY_SHOPKEEPER_ZONES[ ToontownGlobals.WINTER_CAROLING]: self.WinterCarolingManager = DistributedWinterCarolingTargetAI.DistributedWinterCarolingTargetAI( self.air) self.WinterCarolingManager.generateWithRequired( HOLIDAY_SHOPKEEPER_ZONES[ToontownGlobals.WINTER_CAROLING][ self.canonicalHoodId]) def endWinterCaroling(self): if hasattr(self, 'WinterCarolingManager'): self.WinterCarolingManager.requestDelete() del self.WinterCarolingManager def generateFireworkShow(self): self.fireworkShow = DistributedFireworkShowAI(self.air) self.fireworkShow.generateWithRequired(self.zoneId) def startFireworks(self, showType, showIndex): self.fireworkShow.b_startShow(showType, showIndex, globalClockDelta.getRealNetworkTime())
class HoodDataAI(DirectObject.DirectObject): notify = DirectNotifyGlobal.directNotify.newCategory('HoodDataAI') def __init__(self, air, zoneId, canonicalHoodId): self.air = air self.zoneId = zoneId DirectObject.DirectObject.__init__(self) self.canonicalHoodId = canonicalHoodId self.treasurePlanner = None self.buildingManagers = [] self.suitPlanners = [] self.doId2do = {} self.replacementHood = None self.redirectingToMe = [] self.hoodPopulation = 0 self.pgPopulation = 0 self.classicChar = None try: self.cCharClass except: self.cCharClass = None else: try: self.cCharClassAF except: self.cCharClassAF = None else: try: self.cCharClassHW except: self.cCharClassHW = None try: self.cCharConfigVar except: self.cCharConfigVar = 'want-classic-chars' self.startup() return def startup(self): self.createTreasurePlanner() for zone in self.air.zoneTable[self.canonicalHoodId]: if zone[1]: zoneId = ZoneUtil.getTrueZoneId(zone[0], self.zoneId) DNASpawnerAI().spawnObjects(self.air.genDNAFileName(zoneId), zoneId) self.createBuildingManagers() self.createSuitPlanners() if self.cCharClass != None: if simbase.air.holidayManager.isHolidayRunning(ToontownGlobals.APRIL_FOOLS_COSTUMES) and self.cCharClassAF != None: self.createAFClassicCharacter() else: self.createClassicCharacter() return def shutdown(self): self.ignore('holidayStart-%d' % ToontownGlobals.APRIL_FOOLS_COSTUMES) self.ignore('holidayEnd-%d' % ToontownGlobals.APRIL_FOOLS_COSTUMES) self.setRedirect(None) if self.treasurePlanner: self.treasurePlanner.stop() self.treasurePlanner.deleteAllTreasuresNow() self.treasurePlanner = None for suitPlanner in self.suitPlanners: suitPlanner.requestDelete() del self.air.suitPlanners[suitPlanner.zoneId] self.suitPlanners = [] for buildingManager in self.buildingManagers: buildingManager.cleanup() del self.air.buildingManagers[buildingManager.branchID] self.buildingManagers = [] ButterflyGlobals.clearIndexes(self.zoneId) for distObj in self.doId2do.values(): distObj.requestDelete() del self.doId2do del self.air return def addDistObj(self, distObj): self.doId2do[distObj.doId] = distObj def removeDistObj(self, distObj): del self.doId2do[distObj.doId] def createTreasurePlanner(self): if self.zoneId in (8000, 17000, 11000, 12000, 13000, 10000, 1002000, 19000, 62000): return treasureType, healAmount, spawnPoints, spawnRate, maxTreasures = TreasureGlobals.SafeZoneTreasureSpawns[self.zoneId] self.treasurePlanner = SZTreasurePlannerAI(self.zoneId, treasureType, healAmount, spawnPoints, spawnRate, maxTreasures) self.treasurePlanner.start() def createBuildingManagers(self): for zone in self.air.zoneTable[self.canonicalHoodId]: if zone[1]: zoneId = ZoneUtil.getTrueZoneId(zone[0], self.zoneId) dnaStore = self.air.dnaStoreMap(zone[0]) mgr = DistributedBuildingMgrAI.DistributedBuildingMgrAI(self.air, zoneId, dnaStore, self.air.trophyMgr) self.buildingManagers.append(mgr) self.air.buildingManagers[zoneId] = mgr def createSuitPlanners(self): for zone in self.air.zoneTable[self.canonicalHoodId]: if zone[2]: zoneId = ZoneUtil.getTrueZoneId(zone[0], self.zoneId) sp = DistributedSuitPlannerAI.DistributedSuitPlannerAI(self.air, zoneId) sp.generateWithRequired(zoneId) sp.d_setZoneId(zoneId) if zoneId != ToontownGlobals.OldOakStreet: sp.initTasks() self.suitPlanners.append(sp) self.air.suitPlanners[zoneId] = sp def createButterflies(self, playground): ButterflyGlobals.generateIndexes(self.zoneId, playground) for i in range(0, ButterflyGlobals.NUM_BUTTERFLY_AREAS[playground]): for j in range(0, ButterflyGlobals.NUM_BUTTERFLIES[playground]): bfly = DistributedButterflyAI.DistributedButterflyAI(self.air, playground, i, self.zoneId) bfly.generateWithRequired(self.zoneId) bfly.start() self.addDistObj(bfly) def createClassicCharacter(self): if self.classicChar: self.classicChar.requestDelete() if simbase.config.GetBool('want-classic-chars', True): if simbase.config.GetBool(self.cCharConfigVar, True): if self.air.holidayManager.isHolidayRunning(ToontownGlobals.HALLOWEEN_COSTUMES) and self.cCharClassHW: self.classicChar = self.cCharClassHW(self.air) else: self.classicChar = self.cCharClass(self.air) self.classicChar.generateWithRequired(self.zoneId) self.classicChar.start() self.addDistObj(self.classicChar) if self.cCharClassAF != None: self.acceptOnce('holidayStart-%d' % ToontownGlobals.APRIL_FOOLS_COSTUMES, self.createAFClassicCharacter) return def createAFClassicCharacter(self): self.ignore('holidayStart-%d' % ToontownGlobals.APRIL_FOOLS_COSTUMES) if self.classicChar: self.classicChar.requestDelete() if simbase.config.GetBool('want-classic-chars', True): if simbase.config.GetBool(self.cCharConfigVar, True): self.classicChar = self.cCharClassAF(self.air) self.classicChar.generateWithRequired(self.zoneId) self.classicChar.start() self.addDistObj(self.classicChar) self.acceptOnce('holidayEnd-%d' % ToontownGlobals.APRIL_FOOLS_COSTUMES, self.createClassicCharacter) def setRedirect(self, replacementHood): if self.replacementHood: self.replacementHood[0].redirectingToMe.remove(self) self.replacementHood = replacementHood if self.replacementHood: self.replacementHood[0].redirectingToMe.append(self) def hasRedirect(self): return self.replacementHood != None def getRedirect(self): if self.replacementHood == None: return self return self.replacementHood[0].getRedirect() return def incrementPopulation(self, zoneId, increment): self.hoodPopulation += increment if ZoneUtil.isPlayground(zoneId): self.pgPopulation += increment def getHoodPopulation(self): population = self.hoodPopulation for hood in self.redirectingToMe: population += hood.getHoodPopulation() return population def getPgPopulation(self): population = self.pgPopulation for pg in self.redirectingToMe: population += pg.getPgPopulation() return population
class HoodAI: notify = directNotify.newCategory('HoodAI') notify.setInfo(True) def __init__(self, air, zoneId, canonicalHoodId): self.air = air self.zoneId = zoneId self.canonicalHoodId = canonicalHoodId self.fishingPonds = [] self.partyGates = [] self.treasurePlanner = None self.buildingManagers = [] self.suitPlanners = [] for zoneId in self.getZoneTable(): self.notify.info('Creating objects... ' + self.getLocationName(zoneId)) dnaFileName = self.air.lookupDNAFileName(zoneId) dnaStore = DNAStorage() dnaData = simbase.air.loadDNAFileAI(dnaStore, dnaFileName) self.air.dnaStoreMap[zoneId] = dnaStore self.air.dnaDataMap[zoneId] = dnaData def getZoneTable(self): zoneTable = [self.zoneId] zoneTable.extend(ToontownGlobals.HoodHierarchy.get(self.canonicalHoodId, [])) return zoneTable def getLocationName(self, zoneId): lookupTable = ToontownGlobals.hoodNameMap isStreet = (zoneId%1000) != 0 if isStreet: lookupTable = TTLocalizer.GlobalStreetNames name = lookupTable.get(zoneId, '') if isStreet: return '%s, %s' % (self.getLocationName(self.zoneId), name[2]) return name[2] def startup(self): if self.air.wantFishing: self.createFishingPonds() if self.air.wantParties: self.createPartyPeople() if simbase.config.GetBool('want-treasure-planners', True): self.createTreasurePlanner() self.createBuildingManagers() if simbase.config.GetBool('want-suit-planners', True): self.createSuitPlanners() def shutdown(self): if self.treasurePlanner: self.treasurePlanner.stop() self.treasurePlanner.deleteAllTreasuresNow() self.treasurePlanner = None for suitPlanner in self.suitPlanners: suitPlanner.requestDelete() del self.air.suitPlanners[suitPlanner.zoneId] self.suitPlanners = [] for buildingManager in self.buildingManagers: buildingManager.cleanup() del self.air.buildingManagers[buildingManager.branchId] self.buildingManagers = [] del self.fishingPonds for distObj in self.doId2do.values(): distObj.requestDelete() def findFishingPonds(self, dnaGroup, zoneId, area): fishingPonds = [] fishingPondGroups = [] if isinstance(dnaGroup, DNAGroup) and ('fishing_pond' in dnaGroup.getName()): fishingPondGroups.append(dnaGroup) fishingPond = DistributedFishingPondAI(simbase.air) fishingPond.setArea(area) fishingPond.generateWithRequired(zoneId) fishingPond.start() fishingPonds.append(fishingPond) elif isinstance(dnaGroup, DNAVisGroup): zoneId = ZoneUtil.getTrueZoneId(int(dnaGroup.getName().split(':')[0]), zoneId) for i in xrange(dnaGroup.getNumChildren()): (foundFishingPonds, foundFishingPondGroups) = self.findFishingPonds(dnaGroup.at(i), zoneId, area) fishingPonds.extend(foundFishingPonds) fishingPondGroups.extend(foundFishingPondGroups) return (fishingPonds, fishingPondGroups) def findFishingSpots(self, dnaGroup, fishingPond): fishingSpots = [] if isinstance(dnaGroup, DNAGroup) and ('fishing_spot' in dnaGroup.getName()): fishingSpot = DistributedFishingSpotAI(simbase.air) fishingSpot.setPondDoId(fishingPond.doId) x, y, z = dnaGroup.getPos() h, p, r = dnaGroup.getHpr() fishingSpot.setPosHpr(x, y, z, h, p, r) fishingSpot.generateWithRequired(fishingPond.zoneId) fishingSpots.append(fishingSpot) for i in xrange(dnaGroup.getNumChildren()): foundFishingSpots = self.findFishingSpots(dnaGroup.at(i), fishingPond) fishingSpots.extend(foundFishingSpots) return fishingSpots 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)) def findPartyGates(self, dnaGroup, zoneId): partyGates = [] if isinstance(dnaGroup, DNAGroup) and ('prop_party_gate' in dnaGroup.getName()): partyGate = DistributedPartyGateAI(simbase.air) partyGate.setArea(zoneId) partyGate.generateWithRequired(zoneId) partyGates.append(partyGates) for i in xrange(dnaGroup.getNumChildren()): foundPartyGates = self.findPartyGates(dnaGroup.at(i), zoneId) partyGates.extend(foundPartyGates) return partyGates def createPartyPeople(self): self.partyGates = [] for zoneId in self.getZoneTable(): dnaData = self.air.dnaDataMap.get(zoneId, None) zoneId = ZoneUtil.getTrueZoneId(zoneId, self.zoneId) if dnaData.getName() == 'root': foundPartyGates = self.findPartyGates(dnaData, zoneId) self.partyGates.extend(foundPartyGates) def createTreasurePlanner(self): spawnInfo = TreasureGlobals.SafeZoneTreasureSpawns.get(self.canonicalHoodId) if not spawnInfo: return treasureType, healAmount, spawnPoints, spawnRate, maxTreasures = spawnInfo self.treasurePlanner = SZTreasurePlannerAI( self.canonicalHoodId, treasureType, healAmount, spawnPoints, spawnRate, maxTreasures) self.treasurePlanner.start() def createBuildingManagers(self): for zoneId in self.getZoneTable(): dnaStore = self.air.dnaStoreMap[zoneId] zoneId = ZoneUtil.getTrueZoneId(zoneId, self.zoneId) buildingManager = DistributedBuildingMgrAI.DistributedBuildingMgrAI( self.air, zoneId, dnaStore, self.air.trophyMgr) self.buildingManagers.append(buildingManager) self.air.buildingManagers[zoneId] = buildingManager def createSuitPlanners(self): for zoneId in self.getZoneTable(): if zoneId == self.zoneId: continue zoneId = ZoneUtil.getTrueZoneId(zoneId, self.zoneId) suitPlanner = DistributedSuitPlannerAI.DistributedSuitPlannerAI(self.air, zoneId) suitPlanner.generateWithRequired(zoneId) suitPlanner.d_setZoneId(zoneId) suitPlanner.initTasks() self.suitPlanners.append(suitPlanner) self.air.suitPlanners[zoneId] = suitPlanner
class DistributedEstateAI(DistributedObjectAI): notify = DirectNotifyGlobal.directNotify.newCategory('DistributedEstateAI') def __init__(self, air): DistributedObjectAI.__init__(self, air) self.toons = [0, 0, 0, 0, 0, 0] self.items = [[], [], [], [], [], []] self.estateType = 0 self.cloudType = 0 self.dawnTime = 0 self.lastEpochTimestamp = 0 self.rentalTimestamp = 0 self.houses = [None] * 6 self.pond = None self.spots = [] self.targets = [] self.treasurePlanner = None self.rentalType = 0 self.rentalHandle = None self.owner = None self.gardenManager = GardenManager(self) self.__pendingGardens = {} return def generate(self): DistributedObjectAI.generate(self) self.pond = DistributedFishingPondAI(simbase.air) self.pond.setArea(ToontownGlobals.MyEstate) self.pond.generateWithRequired(self.zoneId) for i in range(FishingTargetGlobals.getNumTargets(ToontownGlobals.MyEstate)): target = DistributedFishingTargetAI(self.air) target.setPondDoId(self.pond.getDoId()) target.generateWithRequired(self.zoneId) self.targets.append(target) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(49.1029, -124.805, 0.344704, 90, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(46.5222, -134.739, 0.390713, 75, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(41.31, -144.559, 0.375978, 45, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(46.8254, -113.682, 0.46015, 135, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) self.createTreasurePlanner() def destroy(self): for house in self.houses: if house: house.requestDelete() del self.houses[:] if self.pond: for spot in self.spots: spot.requestDelete() self.spots = [] for target in self.targets: target.requestDelete() self.targets = [] self.pond.requestDelete() self.pond = None self.gardenManager.destroy() if self.rentalHandle: self.rentalHandle.destroy() self.rentalHandle = None if self.treasurePlanner: self.treasurePlanner.stop() self.requestDelete() return def setClientReady(self): self.sendUpdate('setEstateReady', []) def setEstateType(self, type): self.estateType = type def d_setEstateType(self, type): self.sendUpdate('setEstateType', [type]) def b_setEstateType(self, type): self.setEstateType(type) self.d_setEstateType(type) def getEstateType(self): return self.estateType def createTreasurePlanner(self): treasureType, healAmount, spawnPoints, spawnRate, maxTreasures = TreasureGlobals.SafeZoneTreasureSpawns[ToontownGlobals.MyEstate] self.treasurePlanner = SZTreasurePlannerAI(self.zoneId, treasureType, healAmount, spawnPoints, spawnRate, maxTreasures) self.treasurePlanner.start() def requestServerTime(self): avId = self.air.getAvatarIdFromSender() self.sendUpdateToAvatarId(avId, 'setServerTime', [time.time() % HouseGlobals.DAY_NIGHT_PERIOD]) def setDawnTime(self, dawnTime): self.dawnTime = dawnTime def d_setDawnTime(self, dawnTime): self.sendUpdate('setDawnTime', [dawnTime]) def b_setDawnTime(self, dawnTime): self.setDawnTime(dawnTime) self.d_setDawnTime(dawnTime) def getDawnTime(self): return self.dawnTime def setLastEpochTimeStamp(self, last): self.lastEpochTimestamp = last def d_setLastEpochTimeStamp(self, last): self.sendUpdate('setLastEpochTimeStamp', [last]) def b_setLastEpochTimeStamp(self, last): self.setLastEpochTimeStamp(last) self.d_setLastEpochTimeStamp(last) def getLastEpochTimeStamp(self): return self.lastEpochTimestamp def setRentalTimeStamp(self, rental): self.rentalTimestamp = rental def d_setRentalTimeStamp(self, rental): self.sendUpdate('setRentalTimeStamp', [rental]) def b_setRentalTimeStamp(self, rental): self.setRentalTimeStamp(rental) self.d_setRentalTimeStamp(rental) def getRentalTimeStamp(self): return self.rentalTimestamp def b_setRentalType(self, type): self.d_setRentalType(type) self.setRentalType(type) def d_setRentalType(self, type): self.sendUpdate('setRentalType', [type]) def setRentalType(self, type): expirestamp = self.getRentalTimeStamp() if expirestamp == 0: expire = 0 else: expire = int(expirestamp - time.time()) if expire < 0: self.rentalType = 0 self.d_setRentalType(0) self.b_setRentalTimeStamp(0) else: if self.rentalType == type: return self.rentalType = type if self.rentalHandle: self.rentalHandle.destroy() self.rentalHandle = None if self.rentalType == ToontownGlobals.RentalCannon: self.rentalHandle = CannonRental(self) else: self.notify.warning('Unknown rental %s' % self.rentalType) return self.rentalHandle.generateObjects() return def getRentalType(self): return self.rentalType def rentItem(self, rentType, duration): self.b_setRentalTimeStamp(time.time() + duration * 60) self.b_setRentalType(rentType) def setSlot0ToonId(self, id): self.toons[0] = id def d_setSlot0ToonId(self, id): self.sendUpdate('setSlot0ToonId', [id]) def b_setSlot0ToonId(self, id): self.setSlot0ToonId(id) self.d_setSlot0ToonId(id) def getSlot0ToonId(self): return self.toons[0] def setSlot0Items(self, items): self.items[0] = items def d_setSlot0Items(self, items): self.sendUpdate('setSlot5Items', [items]) def b_setSlot0Items(self, items): self.setSlot0Items(items) self.d_setSlot0Items(items) def getSlot0Items(self): return self.items[0] def setSlot1ToonId(self, id): self.toons[1] = id def d_setSlot1ToonId(self, id): self.sendUpdate('setSlot1ToonId', [id]) def b_setSlot1ToonId(self, id): self.setSlot1ToonId(id) self.d_setSlot1ToonId(id) def getSlot1ToonId(self): return self.toons[1] def setSlot1Items(self, items): self.items[1] = items def d_setSlot1Items(self, items): self.sendUpdate('setSlot2Items', [items]) def b_setSlot1Items(self, items): self.setSlot2Items(items) self.d_setSlot2Items(items) def getSlot1Items(self): return self.items[1] def setSlot2ToonId(self, id): self.toons[2] = id def d_setSlot2ToonId(self, id): self.sendUpdate('setSlot2ToonId', [id]) def b_setSlot2ToonId(self, id): self.setSlot2ToonId(id) self.d_setSlot2ToonId(id) def getSlot2ToonId(self): return self.toons[2] def setSlot2Items(self, items): self.items[2] = items def d_setSlot2Items(self, items): self.sendUpdate('setSlot2Items', [items]) def b_setSlot2Items(self, items): self.setSlot2Items(items) self.d_setSlot2Items(items) def getSlot2Items(self): return self.items[2] def setSlot3ToonId(self, id): self.toons[3] = id def d_setSlot3ToonId(self, id): self.sendUpdate('setSlot3ToonId', [id]) def b_setSlot3ToonId(self, id): self.setSlot3ToonId(id) self.d_setSlot3ToonId(id) def getSlot3ToonId(self): return self.toons[3] def setSlot3Items(self, items): self.items[3] = items def d_setSlot3Items(self, items): self.sendUpdate('setSlot3Items', [items]) def b_setSlot3Items(self, items): self.setSlot3Items(items) self.d_setSlot3Items(items) def getSlot3Items(self): return self.items[3] def setSlot4ToonId(self, id): self.toons[4] = id def d_setSlot4ToonId(self, id): self.sendUpdate('setSlot4ToonId', [id]) def b_setSlot5ToonId(self, id): self.setSlot4ToonId(id) self.d_setSlot4ToonId(id) def getSlot4ToonId(self): return self.toons[4] def setSlot4Items(self, items): self.items[4] = items def d_setSlot4Items(self, items): self.sendUpdate('setSlot4Items', [items]) def b_setSlot4Items(self, items): self.setSlot4Items(items) self.d_setSlot4Items(items) def getSlot4Items(self): return self.items[4] def setSlot5ToonId(self, id): self.toons[5] = id def d_setSlot5ToonId(self, id): self.sendUpdate('setSlot5ToonId', [id]) def b_setSlot5ToonId(self, id): self.setSlot5ToonId(id) self.d_setSlot5ToonId(id) def getSlot5ToonId(self): return self.toons[5] def setSlot5Items(self, items): self.items[5] = items def d_setSlot5Items(self, items): self.sendUpdate('setSlot5Items', [items]) def b_setSlot5Items(self, items): self.setSlot5Items(items) self.d_setSlot5Items(items) def getSlot5Items(self): return self.items[5] def setIdList(self, idList): for i in range(len(idList)): if i >= 6: return self.toons[i] = idList[i] def d_setIdList(self, idList): self.sendUpdate('setIdList', [idList]) def b_setIdList(self, idList): self.setIdList(idList) self.d_setIdLst(idList) def completeFlowerSale(self, flag): if not flag: return avId = self.air.getAvatarIdFromSender() av = self.air.doId2do.get(avId) if not av: return collection = av.flowerCollection earning = 0 newSpecies = 0 for flower in av.flowerBasket.getFlower(): if collection.collectFlower(flower) == GardenGlobals.COLLECT_NEW_ENTRY: newSpecies += 1 earning += flower.getValue() av.b_setFlowerBasket([], []) av.d_setFlowerCollection(*av.flowerCollection.getNetLists()) av.addMoney(earning) oldSpecies = len(collection) - newSpecies dt = abs(len(collection) // 10 - oldSpecies // 10) if dt: self.notify.info('%d is getting a gardening trophy!' % avId) maxHp = av.getMaxHp() maxHp = min(ToontownGlobals.MaxHpLimit, maxHp + dt) av.b_setMaxHp(maxHp) av.toonUp(maxHp) self.sendUpdate('awardedTrophy', [avId]) av.b_setGardenTrophies(range(len(collection) // 10)) def setClouds(self, clouds): self.cloudType = clouds def d_setClouds(self, clouds): self.sendUpdate('setClouds', [clouds]) def b_setClouds(self, clouds): self.setClouds(clouds) self.d_setClouds(clouds) def getClouds(self): return self.cloudType def getToonSlot(self, avId): if avId not in self.toons: return return self.toons.index(avId) def setSlot0Garden(self, flag): self.__pendingGardens[0] = flag def setSlot1Garden(self, flag): self.__pendingGardens[1] = flag def setSlot2Garden(self, flag): self.__pendingGardens[2] = flag def setSlot3Garden(self, flag): self.__pendingGardens[3] = flag def setSlot4Garden(self, flag): self.__pendingGardens[4] = flag def setSlot5Garden(self, flag): self.__pendingGardens[5] = flag def placeStarterGarden(self, avId, record=1): av = self.air.doId2do.get(avId) if not av: return slot = self.getToonSlot(avId) if slot is None: return if record: av.b_setGardenStarted(1) self.sendUpdate('setSlot%dGarden' % slot, ['started']) self.notify.info('placeStarterGarden %d %d' % (avId, slot)) self.gardenManager.handleSingleGarden(avId) return def announceGenerate(self): DistributedObjectAI.announceGenerate(self) self.sendUpdate('setIdList', [self.toons]) def placeGardens(self): for index, started in self.__pendingGardens.items(): if started: self.gardenManager.handleSingleGarden(self.toons[index]) self.__pendingGardens = {}
class DistributedEstateAI(DistributedObjectAI): notify = DirectNotifyGlobal.directNotify.newCategory('DistributedEstateAI') def __init__(self, air): DistributedObjectAI.__init__(self, air) self.toons = [0, 0, 0, 0, 0, 0] self.items = [[], [], [], [], [], []] self.estateType = 0 self.cloudType = 0 self.dawnTime = 0 self.lastEpochTimestamp = 0 self.rentalTimestamp = 0 self.houses = [None] * 6 self.rentalType = 0 self.rentalHandle = None self.pond = None self.spots = [] self.butterflies = [] self.owner = None self.gardenManager = GardenManager(self) self.__pendingGardens = {} def generate(self): DistributedObjectAI.generate(self) self.pond = DistributedFishingPondAI(simbase.air) self.pond.setArea(ToontownGlobals.MyEstate) self.pond.generateWithRequired(self.zoneId) self.pond.start() treasureType, healAmount, spawnPoints, spawnRate, maxTreasures = TreasureGlobals.SafeZoneTreasureSpawns[ToontownGlobals.MyEstate] self.treasurePlanner = SZTreasurePlannerAI(self.zoneId, treasureType, healAmount, spawnPoints, spawnRate, maxTreasures) self.treasurePlanner.start() spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(49.1029, -124.805, 0.344704, 90, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(46.5222, -134.739, 0.390713, 75, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(41.31, -144.559, 0.375978, 45, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(46.8254, -113.682, 0.46015, 135, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) ButterflyGlobals.generateIndexes(self.zoneId, ButterflyGlobals.ESTATE) for i in xrange(0, ButterflyGlobals.NUM_BUTTERFLY_AREAS[ButterflyGlobals.ESTATE]): for j in xrange(0, ButterflyGlobals.NUM_BUTTERFLIES[ButterflyGlobals.ESTATE]): butterfly = DistributedButterflyAI.DistributedButterflyAI(self.air, ButterflyGlobals.ESTATE, i, self.zoneId) butterfly.generateWithRequired(self.zoneId) butterfly.start() self.butterflies.append(butterfly) def destroy(self): for house in self.houses: if house: house.requestDelete() for butterfly in self.butterflies: if butterfly: butterfly.requestDelete() del self.houses[:] if self.pond: for spot in self.spots: spot.requestDelete() self.spots = [] self.pond.requestDelete() self.pond = None if self.treasurePlanner: self.treasurePlanner.stop() self.gardenManager.destroy() if self.rentalHandle: self.rentalHandle.destroy() self.rentalHandle = None self.requestDelete() def addDistObj(self, distObj): self.doId2do[distObj.doId] = distObj def setClientReady(self): self.sendUpdate('setEstateReady', []) def setEstateType(self, type): self.estateType = type def d_setEstateType(self, type): self.sendUpdate('setEstateType', [type]) def b_setEstateType(self, type): self.setEstateType(type) self.d_setEstateType(type) def getEstateType(self): return self.estateType def requestServerTime(self): avId = self.air.getAvatarIdFromSender() self.sendUpdateToAvatarId(avId, 'setServerTime', [time.time() % HouseGlobals.DAY_NIGHT_PERIOD]) def setDawnTime(self, dawnTime): self.dawnTime = dawnTime def d_setDawnTime(self, dawnTime): self.sendUpdate('setDawnTime', [dawnTime]) def b_setDawnTime(self, dawnTime): self.setDawnTime(dawnTime) self.d_setDawnTime(dawnTime) def getDawnTime(self): return self.dawnTime def setLastEpochTimeStamp(self, last): self.lastEpochTimestamp = last def d_setLastEpochTimeStamp(self, last): self.sendUpdate('setLastEpochTimeStamp', [last]) def b_setLastEpochTimeStamp(self, last): self.setLastEpochTimeStamp(last) self.d_setLastEpochTimeStamp(last) def getLastEpochTimeStamp(self): return self.lastEpochTimestamp def setRentalTimeStamp(self, rental): self.rentalTimestamp = rental def d_setRentalTimeStamp(self, rental): self.sendUpdate('setRentalTimeStamp', [rental]) def b_setRentalTimeStamp(self, rental): self.setRentalTimeStamp(rental) self.d_setRentalTimeStamp(rental) def getRentalTimeStamp(self): return self.rentalTimestamp def b_setRentalType(self, type): self.d_setRentalType(type) self.setRentalType(type) def d_setRentalType(self, type): self.sendUpdate('setRentalType', [type]) def setRentalType(self, type): expirestamp = self.getRentalTimeStamp() if expirestamp == 0: expire = 0 else: expire = int(expirestamp - time.time()) if expire < 0: self.rentalType = 0 self.d_setRentalType(0) self.b_setRentalTimeStamp(0) else: if self.rentalType == type: return self.rentalType = type if self.rentalHandle: self.rentalHandle.destroy() self.rentalHandle = None if self.rentalType == ToontownGlobals.RentalCannon: self.rentalHandle = CannonRental(self) else: self.notify.warning('Unknown rental %s' % self.rentalType) return self.rentalHandle.generateObjects() def getRentalType(self): return self.rentalType def rentItem(self, rentType, duration): self.b_setRentalTimeStamp(time.time() + duration * 60) self.b_setRentalType(rentType) def setSlot0ToonId(self, id): self.toons[0] = id def d_setSlot0ToonId(self, id): self.sendUpdate('setSlot0ToonId', [id]) def b_setSlot0ToonId(self, id): self.setSlot0ToonId(id) self.d_setSlot0ToonId(id) def getSlot0ToonId(self): return self.toons[0] def setSlot0Items(self, items): self.items[0] = items def d_setSlot0Items(self, items): self.sendUpdate('setSlot5Items', [items]) def b_setSlot0Items(self, items): self.setSlot0Items(items) self.d_setSlot0Items(items) def getSlot0Items(self): return self.items[0] def setSlot1ToonId(self, id): self.toons[1] = id def d_setSlot1ToonId(self, id): self.sendUpdate('setSlot1ToonId', [id]) def b_setSlot1ToonId(self, id): self.setSlot1ToonId(id) self.d_setSlot1ToonId(id) def getSlot1ToonId(self): return self.toons[1] def setSlot1Items(self, items): self.items[1] = items def d_setSlot1Items(self, items): self.sendUpdate('setSlot2Items', [items]) def b_setSlot1Items(self, items): self.setSlot2Items(items) self.d_setSlot2Items(items) def getSlot1Items(self): return self.items[1] def setSlot2ToonId(self, id): self.toons[2] = id def d_setSlot2ToonId(self, id): self.sendUpdate('setSlot2ToonId', [id]) def b_setSlot2ToonId(self, id): self.setSlot2ToonId(id) self.d_setSlot2ToonId(id) def getSlot2ToonId(self): return self.toons[2] def setSlot2Items(self, items): self.items[2] = items def d_setSlot2Items(self, items): self.sendUpdate('setSlot2Items', [items]) def b_setSlot2Items(self, items): self.setSlot2Items(items) self.d_setSlot2Items(items) def getSlot2Items(self): return self.items[2] def setSlot3ToonId(self, id): self.toons[3] = id def d_setSlot3ToonId(self, id): self.sendUpdate('setSlot3ToonId', [id]) def b_setSlot3ToonId(self, id): self.setSlot3ToonId(id) self.d_setSlot3ToonId(id) def getSlot3ToonId(self): return self.toons[3] def setSlot3Items(self, items): self.items[3] = items def d_setSlot3Items(self, items): self.sendUpdate('setSlot3Items', [items]) def b_setSlot3Items(self, items): self.setSlot3Items(items) self.d_setSlot3Items(items) def getSlot3Items(self): return self.items[3] def setSlot4ToonId(self, id): self.toons[4] = id def d_setSlot4ToonId(self, id): self.sendUpdate('setSlot4ToonId', [id]) def b_setSlot5ToonId(self, id): self.setSlot4ToonId(id) self.d_setSlot4ToonId(id) def getSlot4ToonId(self): return self.toons[4] def setSlot4Items(self, items): self.items[4] = items def d_setSlot4Items(self, items): self.sendUpdate('setSlot4Items', [items]) def b_setSlot4Items(self, items): self.setSlot4Items(items) self.d_setSlot4Items(items) def getSlot4Items(self): return self.items[4] def setSlot5ToonId(self, id): self.toons[5] = id def d_setSlot5ToonId(self, id): self.sendUpdate('setSlot5ToonId', [id]) def b_setSlot5ToonId(self, id): self.setSlot5ToonId(id) self.d_setSlot5ToonId(id) def getSlot5ToonId(self): return self.toons[5] def setSlot5Items(self, items): self.items[5] = items def d_setSlot5Items(self, items): self.sendUpdate('setSlot5Items', [items]) def b_setSlot5Items(self, items): self.setSlot5Items(items) self.d_setSlot5Items(items) def getSlot5Items(self): return self.items[5] def setIdList(self, idList): for i in xrange(len(idList)): if i >= 6: return self.toons[i] = idList[i] def d_setIdList(self, idList): self.sendUpdate('setIdList', [idList]) def b_setIdList(self, idList): self.setIdList(idList) self.d_setIdLst(idList) def completeFlowerSale(self, flag): if not flag: return avId = self.air.getAvatarIdFromSender() av = self.air.doId2do.get(avId) if not av: return collection = av.flowerCollection earning = 0 newSpecies = 0 for flower in av.flowerBasket.getFlower(): if collection.collectFlower(flower) == GardenGlobals.COLLECT_NEW_ENTRY: newSpecies += 1 earning += flower.getValue() av.b_setFlowerBasket([], []) av.d_setFlowerCollection(*av.flowerCollection.getNetLists()) av.addMoney(earning) oldSpecies = len(collection) - newSpecies dt = abs(len(collection) // 10 - oldSpecies // 10) if dt: self.notify.info('%d is getting a gardening trophy!' % avId) maxHp = av.getMaxHp() maxHp = min(ToontownGlobals.MaxHpLimit, maxHp + dt) av.b_setMaxHp(maxHp) av.toonUp(maxHp) self.sendUpdate('awardedTrophy', [avId]) av.b_setGardenTrophies(range(len(collection) // 10)) def completeFishSale(self): avId = self.air.getAvatarIdFromSender() av = self.air.doId2do.get(avId) if not av: return if self.air.fishManager.creditFishTank(av): self.sendUpdateToAvatarId(avId, 'thankSeller', [ToontownGlobals.FISHSALE_TROPHY, len(av.fishCollection), FishGlobals.getTotalNumFish()]) else: self.sendUpdateToAvatarId(avId, 'thankSeller', [ToontownGlobals.FISHSALE_COMPLETE, 0, 0]) def setClouds(self, clouds): self.cloudType = clouds def d_setClouds(self, clouds): self.sendUpdate('setClouds', [clouds]) def b_setClouds(self, clouds): self.setClouds(clouds) self.d_setClouds(clouds) def getClouds(self): return self.cloudType # Garden methods def getToonSlot(self, avId): if avId not in self.toons: return return self.toons.index(avId) def setSlot0Garden(self, flag): self.__pendingGardens[0] = flag def setSlot1Garden(self, flag): self.__pendingGardens[1] = flag def setSlot2Garden(self, flag): self.__pendingGardens[2] = flag def setSlot3Garden(self, flag): self.__pendingGardens[3] = flag def setSlot4Garden(self, flag): self.__pendingGardens[4] = flag def setSlot5Garden(self, flag): self.__pendingGardens[5] = flag def placeStarterGarden(self, avId, record=1): av = self.air.doId2do.get(avId) if not av: return slot = self.getToonSlot(avId) if slot is None: return if record: av.b_setGardenStarted(1) self.sendUpdate('setSlot%dGarden' % slot, ['started']) self.notify.info('placeStarterGarden %d %d' % (avId, slot)) self.gardenManager.handleSingleGarden(avId) def announceGenerate(self): DistributedObjectAI.announceGenerate(self) self.sendUpdate('setIdList', [self.toons]) for index, started in self.__pendingGardens.items(): if started: self.gardenManager.handleSingleGarden(self.toons[index]) self.__pendingGardens = {} if config.GetBool('fake-garden-started-ai', False): self.placeStarterGarden(100000002, 0)
class DistributedEstateAI(DistributedObjectAI): notify = DirectNotifyGlobal.directNotify.newCategory("DistributedEstateAI") def __init__(self, air): DistributedObjectAI.__init__(self, air) self.toons = [0, 0, 0, 0, 0, 0] self.items = [[], [], [], [], [], []] self.decorData = [] self.estateType = 0 # NOT SURE IF THIS HAS ANY USE BUT THANKS DISNEY self.cloudType = 0 self.dawnTime = 0 self.lastEpochTimestamp = 0 self.rentalTimestamp = 0 self.houses = [None] * 6 self.pond = None self.spots = [] self.targets = [] self.pets = [] self.owner = None def generate(self): DistributedObjectAI.generate(self) self.pond = DistributedFishingPondAI(simbase.air) self.pond.setArea(ToontownGlobals.MyEstate) self.pond.generateWithRequired(self.zoneId) for i in xrange( FishingTargetGlobals.getNumTargets(ToontownGlobals.MyEstate)): target = DistributedFishingTargetAI(self.air) target.setPondDoId(self.pond.getDoId()) target.generateWithRequired(self.zoneId) self.targets.append(target) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(49.1029, -124.805, 0.344704, 90, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(46.5222, -134.739, 0.390713, 75, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(41.31, -144.559, 0.375978, 45, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(46.8254, -113.682, 0.46015, 135, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) self.createTreasurePlanner() def announceGenerate(self): DistributedObjectAI.announceGenerate(self) def destroy(self): for house in self.houses: if house: house.requestDelete() del self.houses[:] if self.pond: self.pond.requestDelete() for spot in self.spots: spot.requestDelete() for target in self.targets: target.requestDelete() for pet in self.pets: pet.requestDelete() if self.treasurePlanner: self.treasurePlanner.stop() self.requestDelete() def setEstateReady(self): pass def setClientReady(self): self.sendUpdate('setEstateReady', []) def setEstateType(self, type): self.estateType = type def d_setEstateType(self, type): self.sendUpdate('setEstateType', [type]) def b_setEstateType(self, type): self.setEstateType(type) self.d_setEstateType(type) def getEstateType(self): return self.estateType def setClosestHouse(self, todo0): pass def setTreasureIds(self, todo0): pass def createTreasurePlanner(self): treasureType, healAmount, spawnPoints, spawnRate, maxTreasures = TreasureGlobals.SafeZoneTreasureSpawns[ ToontownGlobals.MyEstate] self.treasurePlanner = SZTreasurePlannerAI(self.zoneId, treasureType, healAmount, spawnPoints, spawnRate, maxTreasures) self.treasurePlanner.start() def initPets(self, owner): def _queryAccount(dclass, fields): avatarList = fields['ACCOUNT_AV_SET'] def _queryToon(dclass, fields): petId, = fields['setPetId'] if not petId: return def _queryPet(dclass, fields): ownerId, = fields['setOwnerId'] petName, = fields['setPetName'] traitSeed, = fields['setTraitSeed'] safeZone, = fields['setSafeZone'] head, = fields['setHead'] ears, = fields['setEars'] nose, = fields['setNose'] tail, = fields['setTail'] bodyTexture, = fields['setBodyTexture'] color, = fields['setColor'] colorScale, = fields['setColorScale'] eyeColor, = fields['setEyeColor'] gender, = fields['setGender'] lastSeenTimestamp, = fields['setLastSeenTimestamp'] trickAptitudes, = fields['setTrickAptitudes'] pet = DistributedPetAI(self.air) pet.setOwnerId(ownerId) pet.setPetName(petName) pet.setTraitSeed(traitSeed) pet.setSafeZone(safeZone) pet.setHead(head) pet.setEars(ears) pet.setNose(nose) pet.setTail(tail) pet.setBodyTexture(bodyTexture) pet.setColor(color) pet.setColorScale(colorScale) pet.setEyeColor(eyeColor) pet.setGender(gender) pet.setLastSeenTimestamp(lastSeenTimestamp) pet.setTrickAptitudes(trickAptitudes) pet.generateWithRequired(self.zoneId) # store the pet do's for use later... self.pets.append(pet) self.air.dbInterface.queryObject(self.air.dbId, petId, callback=_queryPet) for avId in avatarList: if not avId: continue self.air.dbInterface.queryObject(self.air.dbId, avId, callback=_queryToon) self.air.dbInterface.queryObject(self.air.dbId, owner.DISLid, callback=_queryAccount) def requestServerTime(self): self.sendUpdateToAvatarId( self.air.getAvatarIdFromSender(), 'setServerTime', [time.time() % HouseGlobals.DAY_NIGHT_PERIOD]) def setServerTime(self, todo0): pass def setDawnTime(self, dawnTime): self.dawnTime = dawnTime def d_setDawnTime(self, dawnTime): self.sendUpdate('setDawnTime', [dawnTime]) def b_setDawnTime(self, dawnTime): self.setDawnTime(dawnTime) self.d_setDawnTime(dawnTime) def getDawnTime(self): return self.dawnTime def placeOnGround(self, todo0): pass def setDecorData(self, decorData): self.decorData = decorData def d_setDecorData(self, decorData): self.sendUpdate('setDecorData', [decorData]) def b_setDecorData(self, decorData): self.setDecorData(decorData) self.d_setDecorData(decorData) def getDecorData(self): return self.decorData def setLastEpochTimeStamp(self, last): #how do I do this self.lastEpochTimestamp = last def d_setLastEpochTimeStamp(self, last): self.sendUpdate('setLastEpochTimeStamp', [last]) def b_setLastEpochTimeStamp(self, last): self.setLastEpochTimeStamp(last) self.d_setLastEpochTimeStamp(last) def getLastEpochTimeStamp(self): return self.lastEpochTimestamp def setRentalTimeStamp(self, rental): self.rentalTimestamp = rental def d_setRentalTimeStamp(self, rental): self.sendUpdate('setRentalTimeStamp', [rental]) def b_setRentalTimeStamp(self, rental): self.setRentalTimeStamp(self, rental) self.b_setRentalTimeStamp(self, rental) def getRentalTimeStamp(self): return self.rentalTimestamp def setRentalType(self, todo0): pass def getRentalType(self): return 0 def setSlot0ToonId(self, id): self.toons[0] = id def d_setSlot0ToonId(self, id): self.sendUpdate('setSlot0ToonId', [id]) def b_setSlot0ToonId(self, id): self.setSlot0ToonId(id) self.d_setSlot0ToonId(id) def getSlot0ToonId(self): return self.toons[0] def setSlot0Items(self, items): self.items[0] = items def d_setSlot0Items(self, items): self.sendUpdate('setSlot5Items', [items]) def b_setSlot0Items(self, items): self.setSlot0Items(items) self.d_setSlot0Items(items) def getSlot0Items(self): return self.items[0] def setSlot1ToonId(self, id): self.toons[1] = id def d_setSlot1ToonId(self, id): self.sendUpdate('setSlot1ToonId', [id]) def b_setSlot1ToonId(self, id): self.setSlot1ToonId(id) self.d_setSlot1ToonId(id) def getSlot1ToonId(self): return self.toons[1] def setSlot1Items(self, items): self.items[1] = items def d_setSlot1Items(self, items): self.sendUpdate('setSlot2Items', [items]) def b_setSlot1Items(self, items): self.setSlot2Items(items) self.d_setSlot2Items(items) def getSlot1Items(self): return self.items[1] def setSlot2ToonId(self, id): self.toons[2] = id def d_setSlot2ToonId(self, id): self.sendUpdate('setSlot2ToonId', [id]) def b_setSlot2ToonId(self, id): self.setSlot2ToonId(id) self.d_setSlot2ToonId(id) def getSlot2ToonId(self): return self.toons[2] def setSlot2Items(self, items): self.items[2] = items def d_setSlot2Items(self, items): self.sendUpdate('setSlot2Items', [items]) def b_setSlot2Items(self, items): self.setSlot2Items(items) self.d_setSlot2Items(items) def getSlot2Items(self): return self.items[2] def setSlot3ToonId(self, id): self.toons[3] = id def d_setSlot3ToonId(self, id): self.sendUpdate('setSlot3ToonId', [id]) def b_setSlot3ToonId(self, id): self.setSlot3ToonId(id) self.d_setSlot3ToonId(id) def getSlot3ToonId(self): return self.toons[3] def setSlot3Items(self, items): self.items[3] = items def d_setSlot3Items(self, items): self.sendUpdate('setSlot3Items', [items]) def b_setSlot3Items(self, items): self.setSlot3Items(items) self.d_setSlot3Items(items) def getSlot3Items(self): return self.items[3] def setSlot4ToonId(self, id): self.toons[4] = id def d_setSlot4ToonId(self, id): self.sendUpdate('setSlot4ToonId', [id]) def b_setSlot5ToonId(self, id): self.setSlot4ToonId(id) self.d_setSlot4ToonId(id) def getSlot4ToonId(self): return self.toons[4] def setSlot4Items(self, items): self.items[4] = items def d_setSlot4Items(self, items): self.sendUpdate('setSlot4Items', [items]) def b_setSlot4Items(self, items): self.setSlot4Items(items) self.d_setSlot4Items(items) def getSlot4Items(self): return self.items[4] def setSlot5ToonId(self, id): self.toons[5] = id def d_setSlot5ToonId(self, id): self.sendUpdate('setSlot5ToonId', [id]) def b_setSlot5ToonId(self, id): self.setSlot5ToonId(id) self.d_setSlot5ToonId(id) def getSlot5ToonId(self): return self.toons[5] def setSlot5Items(self, items): self.items[5] = items def d_setSlot5Items(self, items): self.sendUpdate('setSlot5Items', [items]) def b_setSlot5Items(self, items): self.setSlot5Items(items) self.d_setSlot5Items(items) def getSlot5Items(self): return self.items[5] def setIdList(self, idList): for i in xrange(len(idList)): if i >= 6: return self.toons[i] = idList[i] def d_setIdList(self, idList): self.sendUpdate('setIdList', [idList]) def b_setIdList(self, idList): self.setIdList(idList) self.d_setIdLst(idList) def completeFlowerSale(self, todo0): pass def awardedTrophy(self, todo0): pass def setClouds(self, clouds): self.cloudType = clouds def d_setClouds(self, clouds): self.sendUpdate('setClouds', [clouds]) def b_setClouds(self, clouds): self.setClouds(clouds) self.d_setClouds(clouds) def getClouds(self): return self.cloudType def cannonsOver(self): pass def gameTableOver(self): pass def updateToons(self): self.d_setSlot0ToonId(self.toons[0]) self.d_setSlot1ToonId(self.toons[1]) self.d_setSlot2ToonId(self.toons[2]) self.d_setSlot3ToonId(self.toons[3]) self.d_setSlot4ToonId(self.toons[4]) self.d_setSlot5ToonId(self.toons[5]) self.sendUpdate('setIdList', [self.toons]) def updateItems(self): self.d_setSlot0Items(self.items[0]) self.d_setSlot1Items(self.items[1]) self.d_setSlot2Items(self.items[2]) self.d_setSlot3Items(self.items[3]) self.d_setSlot4Items(self.items[4]) self.d_setSlot5Items(self.items[5])
def createTreasurePlanner(self): self.treasurePlanner = SZTreasurePlannerAI(self.zoneId, *TreasureGlobals.SafeZoneTreasureSpawns[ToontownGlobals.MyEstate]) self.treasurePlanner.start()
class DistributedEstateAI(DistributedObjectAI): notify = DirectNotifyGlobal.directNotify.newCategory("DistributedEstateAI") def __init__(self, air): DistributedObjectAI.__init__(self, air) self.toons = [0, 0, 0, 0, 0, 0] self.items = [[], [], [], [], [], []] self.decorData = [] self.estateType = 0 self.cloudType = 0 self.dawnTime = 0 self.lastEpochTimestamp = 0 self.rentalTimestamp = 0 self.houses = [None] * 6 self.pond = None self.spots = [] self.targets = [] self.treasurePlanner = None self.owner = None def generate(self): DistributedObjectAI.generate(self) # Gone fishin' self.pond = DistributedFishingPondAI(simbase.air) self.pond.setArea(ToontownGlobals.MyEstate) self.pond.generateWithRequired(self.zoneId) for i in range( FishingTargetGlobals.getNumTargets(ToontownGlobals.MyEstate)): target = DistributedFishingTargetAI(self.air) target.setPondDoId(self.pond.getDoId()) target.generateWithRequired(self.zoneId) self.targets.append(target) for i in xrange(6): avItems = self.items[i] for item in avItems: type, hardPoint, waterLevel, growthLevel, optional = item if type == 2: # broken for now, rip boxes = GardenGlobals.estateBoxes[i] box = DistributedGardenBoxAI(self.air) box.setPlot(i) box.setOwnerIndex(i) box.setTypeIndex(boxes[hardPoint][3]) box.setPosition(boxes[hardPoint][0], boxes[hardPoint][1], 20) box.setHeading(boxes[hardPoint][2]) box.generateWithRequired(self.zoneId) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(49.1029, -124.805, 0.344704, 90, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(46.5222, -134.739, 0.390713, 75, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(41.31, -144.559, 0.375978, 45, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(46.8254, -113.682, 0.46015, 135, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) # Let's place some popsicles self.createTreasurePlanner() def rentItem(self, type, duration): pass # TODO - implement this def destroy(self): for house in self.houses: if house: house.requestDelete() del self.houses[:] if self.pond: self.pond.requestDelete() for spot in self.spots: spot.requestDelete() for target in self.targets: target.requestDelete() if self.treasurePlanner: self.treasurePlanner.stop() self.requestDelete() def setEstateReady(self): pass def setClientReady(self): self.sendUpdate('setEstateReady', []) def setEstateType(self, type): self.estateType = type def d_setEstateType(self, type): self.sendUpdate('setEstateType', [type]) def b_setEstateType(self, type): self.setEstateType(type) self.d_setEstateType(type) def getEstateType(self): return self.estateType def setClosestHouse(self, todo0): pass def setTreasureIds(self, todo0): pass def createTreasurePlanner(self): treasureType, healAmount, spawnPoints, spawnRate, maxTreasures = TreasureGlobals.SafeZoneTreasureSpawns[ ToontownGlobals.MyEstate] self.treasurePlanner = SZTreasurePlannerAI(self.zoneId, treasureType, healAmount, spawnPoints, spawnRate, maxTreasures) self.treasurePlanner.start() def requestServerTime(self): avId = self.air.getAvatarIdFromSender() self.sendUpdateToAvatarId( avId, 'setServerTime', [time.time() % HouseGlobals.DAY_NIGHT_PERIOD]) def setServerTime(self, todo0): pass def setDawnTime(self, dawnTime): self.dawnTime = dawnTime def d_setDawnTime(self, dawnTime): self.sendUpdate('setDawnTime', [dawnTime]) def b_setDawnTime(self, dawnTime): self.setDawnTime(dawnTime) self.d_setDawnTime(dawnTime) def getDawnTime(self): return self.dawnTime def placeOnGround(self, todo0): pass def setDecorData(self, decorData): self.decorData = decorData def d_setDecorData(self, decorData): self.sendUpdate('setDecorData', [decorData]) def b_setDecorData(self, decorData): self.setDecorData(decorData) self.d_setDecorData(decorData) def getDecorData(self): return self.decorData def setLastEpochTimeStamp(self, last): #how do I do this self.lastEpochTimestamp = last def d_setLastEpochTimeStamp(self, last): self.sendUpdate('setLastEpochTimeStamp', [last]) def b_setLastEpochTimeStamp(self, last): self.setLastEpochTimeStamp(last) self.d_setLastEpochTimeStamp(last) def getLastEpochTimeStamp(self): return self.lastEpochTimestamp def setRentalTimeStamp(self, rental): self.rentalTimestamp = rental def d_setRentalTimeStamp(self, rental): self.sendUpdate('setRentalTimeStamp', [rental]) def b_setRentalTimeStamp(self, rental): self.setRentalTimeStamp(self, rental) self.b_setRentalTimeStamp(self, rental) def getRentalTimeStamp(self): return self.rentalTimestamp def setRentalType(self, todo0): pass def getRentalType(self): return 0 def setSlot0ToonId(self, id): self.toons[0] = id def d_setSlot0ToonId(self, id): self.sendUpdate('setSlot0ToonId', [id]) def b_setSlot0ToonId(self, id): self.setSlot0ToonId(id) self.d_setSlot0ToonId(id) def getSlot0ToonId(self): return self.toons[0] def setSlot0Items(self, items): self.items[0] = items def d_setSlot0Items(self, items): self.sendUpdate('setSlot5Items', [items]) def b_setSlot0Items(self, items): self.setSlot0Items(items) self.d_setSlot0Items(items) def getSlot0Items(self): return self.items[0] def setSlot1ToonId(self, id): self.toons[1] = id def d_setSlot1ToonId(self, id): self.sendUpdate('setSlot1ToonId', [id]) def b_setSlot1ToonId(self, id): self.setSlot1ToonId(id) self.d_setSlot1ToonId(id) def getSlot1ToonId(self): return self.toons[1] def setSlot1Items(self, items): self.items[1] = items def d_setSlot1Items(self, items): self.sendUpdate('setSlot2Items', [items]) def b_setSlot1Items(self, items): self.setSlot2Items(items) self.d_setSlot2Items(items) def getSlot1Items(self): return self.items[1] def setSlot2ToonId(self, id): self.toons[2] = id def d_setSlot2ToonId(self, id): self.sendUpdate('setSlot2ToonId', [id]) def b_setSlot2ToonId(self, id): self.setSlot2ToonId(id) self.d_setSlot2ToonId(id) def getSlot2ToonId(self): return self.toons[2] def setSlot2Items(self, items): self.items[2] = items def d_setSlot2Items(self, items): self.sendUpdate('setSlot2Items', [items]) def b_setSlot2Items(self, items): self.setSlot2Items(items) self.d_setSlot2Items(items) def getSlot2Items(self): return self.items[2] def setSlot3ToonId(self, id): self.toons[3] = id def d_setSlot3ToonId(self, id): self.sendUpdate('setSlot3ToonId', [id]) def b_setSlot3ToonId(self, id): self.setSlot3ToonId(id) self.d_setSlot3ToonId(id) def getSlot3ToonId(self): return self.toons[3] def setSlot3Items(self, items): self.items[3] = items def d_setSlot3Items(self, items): self.sendUpdate('setSlot3Items', [items]) def b_setSlot3Items(self, items): self.setSlot3Items(items) self.d_setSlot3Items(items) def getSlot3Items(self): return self.items[3] def setSlot4ToonId(self, id): self.toons[4] = id def d_setSlot4ToonId(self, id): self.sendUpdate('setSlot4ToonId', [id]) def b_setSlot5ToonId(self, id): self.setSlot4ToonId(id) self.d_setSlot4ToonId(id) def getSlot4ToonId(self): return self.toons[4] def setSlot4Items(self, items): self.items[4] = items def d_setSlot4Items(self, items): self.sendUpdate('setSlot4Items', [items]) def b_setSlot4Items(self, items): self.setSlot4Items(items) self.d_setSlot4Items(items) def getSlot4Items(self): return self.items[4] def setSlot5ToonId(self, id): self.toons[5] = id def d_setSlot5ToonId(self, id): self.sendUpdate('setSlot5ToonId', [id]) def b_setSlot5ToonId(self, id): self.setSlot5ToonId(id) self.d_setSlot5ToonId(id) def getSlot5ToonId(self): return self.toons[5] def setSlot5Items(self, items): self.items[5] = items def d_setSlot5Items(self, items): self.sendUpdate('setSlot5Items', [items]) def b_setSlot5Items(self, items): self.setSlot5Items(items) self.d_setSlot5Items(items) def getSlot5Items(self): return self.items[5] def setIdList(self, idList): for i in range(len(idList)): if i >= 6: return self.toons[i] = idList[i] def d_setIdList(self, idList): self.sendUpdate('setIdList', [idList]) def b_setIdList(self, idList): self.setIdList(idList) self.d_setIdLst(idList) def completeFlowerSale(self, todo0): pass def awardedTrophy(self, todo0): pass def setClouds(self, clouds): self.cloudType = clouds def d_setClouds(self, clouds): self.sendUpdate('setClouds', [clouds]) def b_setClouds(self, clouds): self.setClouds(clouds) self.d_setClouds(clouds) def getClouds(self): return self.cloudType def cannonsOver(self): pass def gameTableOver(self): pass def updateToons(self): self.d_setSlot0ToonId(self.toons[0]) self.d_setSlot1ToonId(self.toons[1]) self.d_setSlot2ToonId(self.toons[2]) self.d_setSlot3ToonId(self.toons[3]) self.d_setSlot4ToonId(self.toons[4]) self.d_setSlot5ToonId(self.toons[5]) self.sendUpdate('setIdList', [self.toons]) def updateItems(self): self.d_setSlot0Items(self.items[0]) self.d_setSlot1Items(self.items[1]) self.d_setSlot2Items(self.items[2]) self.d_setSlot3Items(self.items[3]) self.d_setSlot4Items(self.items[4]) self.d_setSlot5Items(self.items[5]) def placeStarterGarden(self, avatar): items = [] if avatar.getGardenStarted(): return avId = avatar.getDoId() houseIndex = self.toons.index(avId) plots = GardenGlobals.estatePlots[houseIndex] boxes = GardenGlobals.estateBoxes[houseIndex] for i in xrange(len(boxes)): items.append([2, i, 0, 0, 0]) box = DistributedGardenBoxAI(self.air) box.setPlot(i) box.setOwnerIndex(houseIndex) box.setTypeIndex(boxes[i][3]) box.setPosition(boxes[i][0], boxes[i][1], 20) box.setHeading(boxes[i][2]) box.generateWithRequired(self.zoneId) for i in xrange(len(plots)): items.append([1, i, 0, 0, 0]) plot = DistributedGardenPlotAI(self.air) plot.setPlot(i) plot.setOwnerIndex(houseIndex) if plots[i][3] != GardenGlobals.FLOWER_TYPE: plot.setPosition(plots[i][0], plots[i][1], 20) plot.setHeading(plots[i][2]) plot.generateWithRequired(self.zoneId) self.items[houseIndex] = items self.updateItems() avatar.b_setGardenStarted(1)
class DistributedEstateAI(DistributedObjectAI): notify = DirectNotifyGlobal.directNotify.newCategory("DistributedEstateAI") def __init__(self, air): DistributedObjectAI.__init__(self, air) self.toons = [0, 0, 0, 0, 0, 0] self.items = [[], [], [], [], [], []] self.decorData = [] self.estateType = 0 # NOT SURE IF THIS HAS ANY USE BUT THANKS DISNEY self.cloudType = 0 self.dawnTime = 0 self.lastEpochTimestamp = 0 self.rentalTimestamp = 0 self.houses = [None] * 6 self.pond = None self.spots = [] self.targets = [] self.owner = None def generate(self): DistributedObjectAI.generate(self) self.pond = DistributedFishingPondAI(simbase.air) self.pond.setArea(ToontownGlobals.MyEstate) self.pond.generateWithRequired(self.zoneId) for i in range( FishingTargetGlobals.getNumTargets(ToontownGlobals.MyEstate)): target = DistributedFishingTargetAI(self.air) target.setPondDoId(self.pond.getDoId()) target.generateWithRequired(self.zoneId) self.targets.append(target) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(49.1029, -124.805, 0.344704, 90, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(46.5222, -134.739, 0.390713, 75, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(41.31, -144.559, 0.375978, 45, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(46.8254, -113.682, 0.46015, 135, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) NPCToons.createNPC(simbase.air, 16010, (self.zoneId, TTLocalizer.NPCToonNames[16010], ('mss', 'm', 'm', 'm', 36, 36, 36, 36, 86, 27, 75, 27, 0, 18), 'm', 0, NPCToons.NPC_FISHERMAN), self.zoneId, posIndex=0) self.createTreasurePlanner() def destroy(self): for house in self.houses: if house: house.requestDelete() del self.houses[:] if self.pond: self.pond.requestDelete() for spot in self.spots: spot.requestDelete() for target in self.targets: target.requestDelete() if self.treasurePlanner: self.treasurePlanner.stop() self.requestDelete() def setEstateReady(self): pass def setClientReady(self): self.sendUpdate('setEstateReady', []) def setEstateType(self, type): self.estateType = type def d_setEstateType(self, type): self.sendUpdate('setEstateType', [type]) def b_setEstateType(self, type): self.setEstateType(type) self.d_setEstateType(type) def getEstateType(self): return self.estateType def setClosestHouse(self, todo0): pass def setTreasureIds(self, todo0): pass def createTreasurePlanner(self): treasureType, healAmount, spawnPoints, spawnRate, maxTreasures = TreasureGlobals.SafeZoneTreasureSpawns[ ToontownGlobals.MyEstate] self.treasurePlanner = SZTreasurePlannerAI(self.zoneId, treasureType, healAmount, spawnPoints, spawnRate, maxTreasures) self.treasurePlanner.start() def requestServerTime(self): avId = self.air.getAvatarIdFromSender() self.sendUpdateToAvatarId( avId, 'setServerTime', [time.time() % HouseGlobals.DAY_NIGHT_PERIOD]) def setServerTime(self, todo0): pass def setDawnTime(self, dawnTime): self.dawnTime = dawnTime def d_setDawnTime(self, dawnTime): self.sendUpdate('setDawnTime', [dawnTime]) def b_setDawnTime(self, dawnTime): self.setDawnTime(dawnTime) self.d_setDawnTime(dawnTime) def getDawnTime(self): return self.dawnTime def placeOnGround(self, todo0): pass def setDecorData(self, decorData): self.decorData = decorData def d_setDecorData(self, decorData): self.sendUpdate('setDecorData', [decorData]) def b_setDecorData(self, decorData): self.setDecorData(decorData) self.d_setDecorData(decorData) def getDecorData(self): return self.decorData def setLastEpochTimeStamp(self, last): #how do I do this self.lastEpochTimestamp = last def d_setLastEpochTimeStamp(self, last): self.sendUpdate('setLastEpochTimeStamp', [last]) def b_setLastEpochTimeStamp(self, last): self.setLastEpochTimeStamp(last) self.d_setLastEpochTimeStamp(last) def getLastEpochTimeStamp(self): return self.lastEpochTimestamp def setRentalTimeStamp(self, rental): self.rentalTimestamp = rental def d_setRentalTimeStamp(self, rental): self.sendUpdate('setRentalTimeStamp', [rental]) def b_setRentalTimeStamp(self, rental): self.setRentalTimeStamp(self, rental) self.b_setRentalTimeStamp(self, rental) def getRentalTimeStamp(self): return self.rentalTimestamp def setRentalType(self, todo0): pass def getRentalType(self): return 0 def setSlot0ToonId(self, id): self.toons[0] = id def d_setSlot0ToonId(self, id): self.sendUpdate('setSlot0ToonId', [id]) def b_setSlot0ToonId(self, id): self.setSlot0ToonId(id) self.d_setSlot0ToonId(id) def getSlot0ToonId(self): return self.toons[0] def setSlot0Items(self, items): self.items[0] = items def d_setSlot0Items(self, items): self.sendUpdate('setSlot5Items', [items]) def b_setSlot0Items(self, items): self.setSlot0Items(items) self.d_setSlot0Items(items) def getSlot0Items(self): return self.items[0] def setSlot1ToonId(self, id): self.toons[1] = id def d_setSlot1ToonId(self, id): self.sendUpdate('setSlot1ToonId', [id]) def b_setSlot1ToonId(self, id): self.setSlot1ToonId(id) self.d_setSlot1ToonId(id) def getSlot1ToonId(self): return self.toons[1] def setSlot1Items(self, items): self.items[1] = items def d_setSlot1Items(self, items): self.sendUpdate('setSlot2Items', [items]) def b_setSlot1Items(self, items): self.setSlot2Items(items) self.d_setSlot2Items(items) def getSlot1Items(self): return self.items[1] def setSlot2ToonId(self, id): self.toons[2] = id def d_setSlot2ToonId(self, id): self.sendUpdate('setSlot2ToonId', [id]) def b_setSlot2ToonId(self, id): self.setSlot2ToonId(id) self.d_setSlot2ToonId(id) def getSlot2ToonId(self): return self.toons[2] def setSlot2Items(self, items): self.items[2] = items def d_setSlot2Items(self, items): self.sendUpdate('setSlot2Items', [items]) def b_setSlot2Items(self, items): self.setSlot2Items(items) self.d_setSlot2Items(items) def getSlot2Items(self): return self.items[2] def setSlot3ToonId(self, id): self.toons[3] = id def d_setSlot3ToonId(self, id): self.sendUpdate('setSlot3ToonId', [id]) def b_setSlot3ToonId(self, id): self.setSlot3ToonId(id) self.d_setSlot3ToonId(id) def getSlot3ToonId(self): return self.toons[3] def setSlot3Items(self, items): self.items[3] = items def d_setSlot3Items(self, items): self.sendUpdate('setSlot3Items', [items]) def b_setSlot3Items(self, items): self.setSlot3Items(items) self.d_setSlot3Items(items) def getSlot3Items(self): return self.items[3] def setSlot4ToonId(self, id): self.toons[4] = id def d_setSlot4ToonId(self, id): self.sendUpdate('setSlot4ToonId', [id]) def b_setSlot5ToonId(self, id): self.setSlot4ToonId(id) self.d_setSlot4ToonId(id) def getSlot4ToonId(self): return self.toons[4] def setSlot4Items(self, items): self.items[4] = items def d_setSlot4Items(self, items): self.sendUpdate('setSlot4Items', [items]) def b_setSlot4Items(self, items): self.setSlot4Items(items) self.d_setSlot4Items(items) def getSlot4Items(self): return self.items[4] def setSlot5ToonId(self, id): self.toons[5] = id def d_setSlot5ToonId(self, id): self.sendUpdate('setSlot5ToonId', [id]) def b_setSlot5ToonId(self, id): self.setSlot5ToonId(id) self.d_setSlot5ToonId(id) def getSlot5ToonId(self): return self.toons[5] def setSlot5Items(self, items): self.items[5] = items def d_setSlot5Items(self, items): self.sendUpdate('setSlot5Items', [items]) def b_setSlot5Items(self, items): self.setSlot5Items(items) self.d_setSlot5Items(items) def getSlot5Items(self): return self.items[5] def setIdList(self, idList): for i in range(len(idList)): if i >= 6: return self.toons[i] = idList[i] def d_setIdList(self, idList): self.sendUpdate('setIdList', [idList]) def b_setIdList(self, idList): self.setIdList(idList) self.d_setIdLst(idList) def completeFlowerSale(self, todo0): pass def awardedTrophy(self, todo0): pass def setClouds(self, clouds): self.cloudType = clouds def d_setClouds(self, clouds): self.sendUpdate('setClouds', [clouds]) def b_setClouds(self, clouds): self.setClouds(clouds) self.d_setClouds(clouds) def getClouds(self): return self.cloudType def cannonsOver(self): pass def gameTableOver(self): pass def updateToons(self): self.d_setSlot0ToonId(self.toons[0]) self.d_setSlot1ToonId(self.toons[1]) self.d_setSlot2ToonId(self.toons[2]) self.d_setSlot3ToonId(self.toons[3]) self.d_setSlot4ToonId(self.toons[4]) self.d_setSlot5ToonId(self.toons[5]) self.sendUpdate('setIdList', [self.toons]) def updateItems(self): self.d_setSlot0Items(self.items[0]) self.d_setSlot1Items(self.items[1]) self.d_setSlot2Items(self.items[2]) self.d_setSlot3Items(self.items[3]) self.d_setSlot4Items(self.items[4]) self.d_setSlot5Items(self.items[5])
class DistributedEstateAI(DistributedObjectAI): notify = directNotify.newCategory("DistributedEstateAI") def __init__(self, air): DistributedObjectAI.__init__(self, air) self.toons = [0, 0, 0, 0, 0, 0] self.estateType = 0 self.cloudType = 0 self.dawnTime = 0 self.lastEpochTimestamp = 0 self.rentalTimestamp = 0 self.houses = [None] * 6 self.pond = None self.spots = [] self.targets = [] self.owner = None def generate(self): DistributedObjectAI.generate(self) self.pond = DistributedFishingPondAI(self.air) self.pond.setArea(ToontownGlobals.MyEstate) self.pond.generateWithRequired(self.zoneId) self.pond.bingoMgr = DistributedPondBingoManagerAI(self.air) self.pond.bingoMgr.setPondDoId(self.pond.doId) self.pond.bingoMgr.generateWithRequired(self.zoneId) if self.air.holidayManager.isHolidayRunning(ToontownGlobals.FISH_BINGO_NIGHT): self.pond.bingoMgr.enableBingo() for i in xrange(FishingTargetGlobals.getNumTargets(ToontownGlobals.MyEstate)): target = DistributedFishingTargetAI(self.air) target.setPondDoId(self.pond.getDoId()) target.generateWithRequired(self.zoneId) self.targets.append(target) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(49.1029, -124.805, 0.344704, 90, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(46.5222, -134.739, 0.390713, 75, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(41.31, -144.559, 0.375978, 45, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(46.8254, -113.682, 0.46015, 135, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) self.createTreasurePlanner() def destroy(self): for house in self.houses: if house is not None: house.requestDelete() del self.houses[:] if self.pond is not None: self.pond.requestDelete() for spot in self.spots: spot.requestDelete() for target in self.targets: target.requestDelete() if self.treasurePlanner is not None: self.treasurePlanner.stop() self.requestDelete() def setEstateReady(self): pass def setClientReady(self): self.sendUpdate('setEstateReady', []) def setEstateType(self, type): self.estateType = type def d_setEstateType(self, type): self.sendUpdate('setEstateType', [type]) def b_setEstateType(self, type): self.setEstateType(type) self.d_setEstateType(type) def getEstateType(self): return self.estateType def setClosestHouse(self, todo0): pass def setTreasureIds(self, todo0): pass def createTreasurePlanner(self): self.treasurePlanner = SZTreasurePlannerAI(self.zoneId, *TreasureGlobals.SafeZoneTreasureSpawns[ToontownGlobals.MyEstate]) self.treasurePlanner.start() def requestServerTime(self): avId = self.air.getAvatarIdFromSender() self.sendUpdateToAvatarId(avId, 'setServerTime', [time.time() % HouseGlobals.DAY_NIGHT_PERIOD]) def setServerTime(self, todo0): pass def setDawnTime(self, dawnTime): self.dawnTime = dawnTime def d_setDawnTime(self, dawnTime): self.sendUpdate('setDawnTime', [dawnTime]) def b_setDawnTime(self, dawnTime): self.setDawnTime(dawnTime) self.d_setDawnTime(dawnTime) def getDawnTime(self): return self.dawnTime def placeOnGround(self, todo0): pass def setLastEpochTimeStamp(self, last): self.lastEpochTimestamp = last def d_setLastEpochTimeStamp(self, last): self.sendUpdate('setLastEpochTimeStamp', [last]) def b_setLastEpochTimeStamp(self, last): self.setLastEpochTimeStamp(last) self.d_setLastEpochTimeStamp(last) def getLastEpochTimeStamp(self): return self.lastEpochTimestamp def setRentalTimeStamp(self, rental): self.rentalTimestamp = rental def d_setRentalTimeStamp(self, rental): self.sendUpdate('setRentalTimeStamp', [rental]) def b_setRentalTimeStamp(self, rental): self.setRentalTimeStamp(self, rental) self.b_setRentalTimeStamp(self, rental) def getRentalTimeStamp(self): return self.rentalTimestamp def setRentalType(self, todo0): pass def getRentalType(self): return 0 def setSlot0ToonId(self, id): self.toons[0] = id def d_setSlot0ToonId(self, id): self.sendUpdate('setSlot0ToonId', [id]) def b_setSlot0ToonId(self, id): self.setSlot0ToonId(id) self.d_setSlot0ToonId(id) def getSlot0ToonId(self): return self.toons[0] def setSlot1ToonId(self, id): self.toons[1] = id def d_setSlot1ToonId(self, id): self.sendUpdate('setSlot1ToonId', [id]) def b_setSlot1ToonId(self, id): self.setSlot1ToonId(id) self.d_setSlot1ToonId(id) def getSlot1ToonId(self): return self.toons[1] def setSlot2ToonId(self, id): self.toons[2] = id def d_setSlot2ToonId(self, id): self.sendUpdate('setSlot2ToonId', [id]) def b_setSlot2ToonId(self, id): self.setSlot2ToonId(id) self.d_setSlot2ToonId(id) def getSlot2ToonId(self): return self.toons[2] def setSlot3ToonId(self, id): self.toons[3] = id def d_setSlot3ToonId(self, id): self.sendUpdate('setSlot3ToonId', [id]) def b_setSlot3ToonId(self, id): self.setSlot3ToonId(id) self.d_setSlot3ToonId(id) def getSlot3ToonId(self): return self.toons[3] def setSlot4ToonId(self, id): self.toons[4] = id def d_setSlot4ToonId(self, id): self.sendUpdate('setSlot4ToonId', [id]) def b_setSlot5ToonId(self, id): self.setSlot4ToonId(id) self.d_setSlot4ToonId(id) def getSlot4ToonId(self): return self.toons[4] def setSlot5ToonId(self, id): self.toons[5] = id def d_setSlot5ToonId(self, id): self.sendUpdate('setSlot5ToonId', [id]) def b_setSlot5ToonId(self, id): self.setSlot5ToonId(id) self.d_setSlot5ToonId(id) def getSlot5ToonId(self): return self.toons[5] def setIdList(self, idList): for i in xrange(len(idList)): if i >= 6: return self.toons[i] = idList[i] def d_setIdList(self, idList): self.sendUpdate('setIdList', [idList]) def b_setIdList(self, idList): self.setIdList(idList) self.d_setIdLst(idList) def setClouds(self, clouds): self.cloudType = clouds def d_setClouds(self, clouds): self.sendUpdate('setClouds', [clouds]) def b_setClouds(self, clouds): self.setClouds(clouds) self.d_setClouds(clouds) def getClouds(self): return self.cloudType def cannonsOver(self): pass def gameTableOver(self): pass def placeStarterGarden(self, av): if av is None: return for house in self.houses: if house is not None: if house.getAvatarId() == av.doId: house.placeStarterGarden() return self.notify.warning('Avatar %s tried to place a starter garden when he didnt own a house!' % av.doId) def updateToons(self): self.d_setSlot0ToonId(self.toons[0]) self.d_setSlot1ToonId(self.toons[1]) self.d_setSlot2ToonId(self.toons[2]) self.d_setSlot3ToonId(self.toons[3]) self.d_setSlot4ToonId(self.toons[4]) self.d_setSlot5ToonId(self.toons[5]) self.sendUpdate('setIdList', [self.toons])
class DistributedEstateAI(DistributedObjectAI): notify = DirectNotifyGlobal.directNotify.newCategory("DistributedEstateAI") def __init__(self, air): DistributedObjectAI.__init__(self, air) self.toons = [0, 0, 0, 0, 0, 0] self.items = [[], [], [], [], [], []] self.decorData = [] self.estateType = 0 # NOT SURE IF THIS HAS ANY USE BUT THANKS DISNEY self.cloudType = 0 self.dawnTime = 0 self.lastEpochTimestamp = 0 self.rentalTimestamp = 0 self.houses = [None] * 6 self.pond = None self.spots = [] self.targets = [] self.owner = None def generate(self): DistributedObjectAI.generate(self) self.pond = DistributedFishingPondAI(simbase.air) self.pond.setArea(ToontownGlobals.MyEstate) self.pond.generateWithRequired(self.zoneId) for i in xrange(FishingTargetGlobals.getNumTargets(ToontownGlobals.MyEstate)): target = DistributedFishingTargetAI(self.air) target.setPondDoId(self.pond.getDoId()) target.generateWithRequired(self.zoneId) self.targets.append(target) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(49.1029, -124.805, 0.344704, 90, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(46.5222, -134.739, 0.390713, 75, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(41.31, -144.559, 0.375978, 45, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) spot = DistributedFishingSpotAI(self.air) spot.setPondDoId(self.pond.getDoId()) spot.setPosHpr(46.8254, -113.682, 0.46015, 135, 0, 0) spot.generateWithRequired(self.zoneId) self.spots.append(spot) self.createTreasurePlanner() def destroy(self): for house in self.houses: if house: house.requestDelete() del self.houses[:] if self.pond: self.pond.requestDelete() for spot in self.spots: spot.requestDelete() for target in self.targets: target.requestDelete() if self.treasurePlanner: self.treasurePlanner.stop() self.requestDelete() def setEstateReady(self): pass def setClientReady(self): self.sendUpdate('setEstateReady', []) def setEstateType(self, type): self.estateType = type def d_setEstateType(self, type): self.sendUpdate('setEstateType', [type]) def b_setEstateType(self, type): self.setEstateType(type) self.d_setEstateType(type) def getEstateType(self): return self.estateType def setClosestHouse(self, todo0): pass def setTreasureIds(self, todo0): pass def createTreasurePlanner(self): treasureType, healAmount, spawnPoints, spawnRate, maxTreasures = TreasureGlobals.SafeZoneTreasureSpawns[ToontownGlobals.MyEstate] self.treasurePlanner = SZTreasurePlannerAI(self.zoneId, treasureType, healAmount, spawnPoints, spawnRate, maxTreasures) self.treasurePlanner.start() def requestServerTime(self): avId = self.air.getAvatarIdFromSender() self.sendUpdateToAvatarId(avId, 'setServerTime', [time.time() % HouseGlobals.DAY_NIGHT_PERIOD]) def setServerTime(self, todo0): pass def setDawnTime(self, dawnTime): self.dawnTime = dawnTime def d_setDawnTime(self, dawnTime): self.sendUpdate('setDawnTime', [dawnTime]) def b_setDawnTime(self, dawnTime): self.setDawnTime(dawnTime) self.d_setDawnTime(dawnTime) def getDawnTime(self): return self.dawnTime def placeOnGround(self, todo0): pass def setDecorData(self, decorData): self.decorData = decorData def d_setDecorData(self, decorData): self.sendUpdate('setDecorData', [decorData]) def b_setDecorData(self, decorData): self.setDecorData(decorData) self.d_setDecorData(decorData) def getDecorData(self): return self.decorData def setLastEpochTimeStamp(self, last): #how do I do this self.lastEpochTimestamp = last def d_setLastEpochTimeStamp(self, last): self.sendUpdate('setLastEpochTimeStamp', [last]) def b_setLastEpochTimeStamp(self, last): self.setLastEpochTimeStamp(last) self.d_setLastEpochTimeStamp(last) def getLastEpochTimeStamp(self): return self.lastEpochTimestamp def setRentalTimeStamp(self, rental): self.rentalTimestamp = rental def d_setRentalTimeStamp(self, rental): self.sendUpdate('setRentalTimeStamp', [rental]) def b_setRentalTimeStamp(self, rental): self.setRentalTimeStamp(self, rental) self.b_setRentalTimeStamp(self, rental) def getRentalTimeStamp(self): return self.rentalTimestamp def setRentalType(self, todo0): pass def getRentalType(self): return 0 def setSlot0ToonId(self, id): self.toons[0] = id def d_setSlot0ToonId(self, id): self.sendUpdate('setSlot0ToonId', [id]) def b_setSlot0ToonId(self, id): self.setSlot0ToonId(id) self.d_setSlot0ToonId(id) def getSlot0ToonId(self): return self.toons[0] def setSlot0Items(self, items): self.items[0] = items def d_setSlot0Items(self, items): self.sendUpdate('setSlot5Items', [items]) def b_setSlot0Items(self, items): self.setSlot0Items(items) self.d_setSlot0Items(items) def getSlot0Items(self): return self.items[0] def setSlot1ToonId(self, id): self.toons[1] = id def d_setSlot1ToonId(self, id): self.sendUpdate('setSlot1ToonId', [id]) def b_setSlot1ToonId(self, id): self.setSlot1ToonId(id) self.d_setSlot1ToonId(id) def getSlot1ToonId(self): return self.toons[1] def setSlot1Items(self, items): self.items[1] = items def d_setSlot1Items(self, items): self.sendUpdate('setSlot2Items', [items]) def b_setSlot1Items(self, items): self.setSlot2Items(items) self.d_setSlot2Items(items) def getSlot1Items(self): return self.items[1] def setSlot2ToonId(self, id): self.toons[2] = id def d_setSlot2ToonId(self, id): self.sendUpdate('setSlot2ToonId', [id]) def b_setSlot2ToonId(self, id): self.setSlot2ToonId(id) self.d_setSlot2ToonId(id) def getSlot2ToonId(self): return self.toons[2] def setSlot2Items(self, items): self.items[2] = items def d_setSlot2Items(self, items): self.sendUpdate('setSlot2Items', [items]) def b_setSlot2Items(self, items): self.setSlot2Items(items) self.d_setSlot2Items(items) def getSlot2Items(self): return self.items[2] def setSlot3ToonId(self, id): self.toons[3] = id def d_setSlot3ToonId(self, id): self.sendUpdate('setSlot3ToonId', [id]) def b_setSlot3ToonId(self, id): self.setSlot3ToonId(id) self.d_setSlot3ToonId(id) def getSlot3ToonId(self): return self.toons[3] def setSlot3Items(self, items): self.items[3] = items def d_setSlot3Items(self, items): self.sendUpdate('setSlot3Items', [items]) def b_setSlot3Items(self, items): self.setSlot3Items(items) self.d_setSlot3Items(items) def getSlot3Items(self): return self.items[3] def setSlot4ToonId(self, id): self.toons[4] = id def d_setSlot4ToonId(self, id): self.sendUpdate('setSlot4ToonId', [id]) def b_setSlot5ToonId(self, id): self.setSlot4ToonId(id) self.d_setSlot4ToonId(id) def getSlot4ToonId(self): return self.toons[4] def setSlot4Items(self, items): self.items[4] = items def d_setSlot4Items(self, items): self.sendUpdate('setSlot4Items', [items]) def b_setSlot4Items(self, items): self.setSlot4Items(items) self.d_setSlot4Items(items) def getSlot4Items(self): return self.items[4] def setSlot5ToonId(self, id): self.toons[5] = id def d_setSlot5ToonId(self, id): self.sendUpdate('setSlot5ToonId', [id]) def b_setSlot5ToonId(self, id): self.setSlot5ToonId(id) self.d_setSlot5ToonId(id) def getSlot5ToonId(self): return self.toons[5] def setSlot5Items(self, items): self.items[5] = items def d_setSlot5Items(self, items): self.sendUpdate('setSlot5Items', [items]) def b_setSlot5Items(self, items): self.setSlot5Items(items) self.d_setSlot5Items(items) def getSlot5Items(self): return self.items[5] def setIdList(self, idList): for i in xrange(len(idList)): if i >= 6: return self.toons[i] = idList[i] def d_setIdList(self, idList): self.sendUpdate('setIdList', [idList]) def b_setIdList(self, idList): self.setIdList(idList) self.d_setIdLst(idList) def completeFlowerSale(self, todo0): pass def awardedTrophy(self, todo0): pass def setClouds(self, clouds): self.cloudType = clouds def d_setClouds(self, clouds): self.sendUpdate('setClouds', [clouds]) def b_setClouds(self, clouds): self.setClouds(clouds) self.d_setClouds(clouds) def getClouds(self): return self.cloudType def cannonsOver(self): pass def gameTableOver(self): pass def updateToons(self): self.d_setSlot0ToonId(self.toons[0]) self.d_setSlot1ToonId(self.toons[1]) self.d_setSlot2ToonId(self.toons[2]) self.d_setSlot3ToonId(self.toons[3]) self.d_setSlot4ToonId(self.toons[4]) self.d_setSlot5ToonId(self.toons[5]) self.sendUpdate('setIdList', [self.toons]) def updateItems(self): self.d_setSlot0Items(self.items[0]) self.d_setSlot1Items(self.items[1]) self.d_setSlot2Items(self.items[2]) self.d_setSlot3Items(self.items[3]) self.d_setSlot4Items(self.items[4]) self.d_setSlot5Items(self.items[5])