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 # 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)
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.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 = {}
def _createObjects(self, group, zone): if group.getName()[:13] == 'fishing_pond_': visGroup = group.getVisGroup() pondZone = 0 if visGroup is None: pondZone = zone else: pondZone = int(visGroup.getName().split(':')[0]) pondIndex = int(group.getName()[13:]) pond = DistributedFishingPondAI(simbase.air) pond.setArea(zone) pond.generateWithRequired(pondZone) bingoManager = DistributedPondBingoManagerAI(simbase.air) bingoManager.setPondDoId(pond.getDoId()) bingoManager.generateWithRequired(pondZone) #temporary, until we have scheduled stuff bingoManager.createGame() pond.bingoMgr = bingoManager simbase.air.fishManager.ponds[zone] = pond for i in range(FishingTargetGlobals.getNumTargets(zone)): target = DistributedFishingTargetAI(simbase.air) target.setPondDoId(pond.getDoId()) target.generateWithRequired(pondZone) for i in range(group.getNumChildren()): posSpot = group.at(i) if posSpot.getName()[:13] == 'fishing_spot_': posSpot = group.atAsNode(i) spot = DistributedFishingSpotAI(simbase.air) spot.setPondDoId(pond.getDoId()) x, y, z = posSpot.getPos() h, p, r = posSpot.getHpr() spot.setPosHpr(x, y, z, h, p, r) spot.generateWithRequired(pondZone) NPCToons.createNpcsInZone(simbase.air, pondZone) elif group.getName()[:10] == 'racing_pad': index, dest = group.getName()[11:].split('_', 2) index = int(index) pad = DistributedRacePadAI(simbase.air) pad.setArea(zone) pad.nameType = dest pad.index = index nri = RaceGlobals.getNextRaceInfo(-1, dest, index) pad.setTrackInfo([nri[0], nri[1]]) pad.generateWithRequired(zone) for i in range(group.getNumChildren()): posSpot = group.at(i) if posSpot.getName()[:14] == 'starting_block': spotIndex = int(posSpot.getName()[15:]) posSpot = group.atAsNode(i) x, y, z = posSpot.getPos() h, p, r = posSpot.getHpr() startingBlock = DistributedStartingBlockAI(simbase.air) startingBlock.setPosHpr(x, y, z, h, p, r) startingBlock.setPadDoId(pad.getDoId()) startingBlock.setPadLocationId(index) startingBlock.generateWithRequired(zone) pad.addStartingBlock(startingBlock) elif group.getName()[:11] == 'viewing_pad': pad = DistributedViewPadAI(simbase.air) pad.setArea(zone) pad.generateWithRequired(zone) for i in range(group.getNumChildren()): posSpot = group.at(i) if posSpot.getName()[:14] == 'starting_block': spotIndex = int(posSpot.getName()[15:]) posSpot = group.atAsNode(i) x, y, z = posSpot.getPos() h, p, r = posSpot.getHpr() startingBlock = DistributedViewingBlockAI(simbase.air) startingBlock.setPosHpr(x, y, z, h, p, r) startingBlock.setPadDoId(pad.getDoId()) startingBlock.setPadLocationId(0) startingBlock.generateWithRequired(zone) pad.addStartingBlock(startingBlock) elif group.getName()[:13] == 'picnic_table_' and zone != 7000: pos = group.getPos() hpr = group.getHpr() nameInfo = group.getName().split('_') picnicTable = DistributedPicnicBasketAI.DistributedPicnicBasketAI( simbase.air, nameInfo[2], pos[0], pos[1], pos[2], hpr[0], hpr[1], hpr[2]) picnicTable.generateWithRequired(zone) picnicTable.start() elif group.getName() == 'prop_game_table_DNARoot' and config.GetBool( 'want-oz-game-tables', True): pos = group.getPos() hpr = group.getHpr() nameInfo = group.getName().split('_') tableIndex = int(group.parent.getName().split('_')[-1]) picnicTable = DistributedPicnicTableAI.DistributedPicnicTableAI( simbase.air, zone, nameInfo[2], pos[0], pos[1], pos[2], hpr[0], hpr[1], hpr[2]) picnicTable.setTableIndex(tableIndex) picnicTable.generateOtpObject( simbase.air.districtId, zone, ['setX', 'setY', 'setZ', 'setH', 'setP', 'setR']) elif group.getName()[:9] == 'golf_kart' and config.GetBool( 'want-golf-karts', False): info = group.getName()[10:].split('_') golfCourse = int(info[0]) kartId = info[1] for i in range(group.getNumChildren()): prop = group.at(i) if prop.getName()[:15] == 'starting_block_': pos, hpr = (prop.getPos(), prop.getHpr()) kart = DistributedGolfKartAI.DistributedGolfKartAI( simbase.air, golfCourse, pos[0], pos[1], pos[2], hpr[0], hpr[1], hpr[2]) kart.generateWithRequired(zone) kart.sendUpdate('setGolfCourse', [golfCourse]) kart.sendUpdate('setPosHpr', [pos[0], pos[1], pos[2], hpr[0], hpr[1], hpr[2]]) color = kart.getColor() kart.sendUpdate('setColor', [color[0], color[1], color[2]]) kart.start() if group.getName()[:15] == 'prop_party_gate': gate = DistributedPartyGateAI(simbase.air) gate.setArea(zone) gate.generateWithRequired(zone) for i in range(group.getNumChildren()): child = group.at(i) self._createObjects(child, zone)
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.doId2do = {} self.pond = None self.spots = [] self.targets = [] 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) 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) self.treasurePlanner = ETreasurePlannerAI.ETreasurePlannerAI( self.zoneId) 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 range( 0, ButterflyGlobals.NUM_BUTTERFLY_AREAS[ButterflyGlobals.ESTATE]): for j in range( 0, ButterflyGlobals.NUM_BUTTERFLIES[ButterflyGlobals.ESTATE]): bfly = DistributedButterflyAI.DistributedButterflyAI( self.air, ButterflyGlobals.ESTATE, i, self.zoneId) bfly.generateWithRequired(self.zoneId) bfly.start() self.addDistObj(bfly) def destroy(self): for house in self.houses: if house: house.requestDelete() 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 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.rentalType = rentType 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, 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 # garden methods def getToonSlot(self, avId): if avId not in self.toons: return return self.toons.index(avId) @unpackGardenSetter def setSlot0Garden(self, started, flowers, trees, si): self.__pendingGardens[0] = (started, flowers, trees, si) @unpackGardenSetter def setSlot1Garden(self, started, flowers, trees, si): self.__pendingGardens[1] = (started, flowers, trees, si) @unpackGardenSetter def setSlot2Garden(self, started, flowers, trees, si): self.__pendingGardens[2] = (started, flowers, trees, si) @unpackGardenSetter def setSlot3Garden(self, started, flowers, trees, si): self.__pendingGardens[3] = (started, flowers, trees, si) @unpackGardenSetter def setSlot4Garden(self, started, flowers, trees, si): self.__pendingGardens[4] = (started, flowers, trees, si) @unpackGardenSetter def setSlot5Garden(self, started, flowers, trees, si): self.__pendingGardens[5] = (started, flowers, trees, si) def d_updateGarden(self, slot=None): self.notify.info('updateGarden %s' % slot) if slot is None: for i in xrange(6): self.d_updateGarden(i) else: data = self.gardenManager.getData(self.toons[slot]) self.sendUpdate('setSlot%dGarden' % slot, [data]) def placeStarterGarden(self, avId): av = self.air.doId2do.get(avId) if not av: return #av.b_setGardenStarted(1) self.notify.info('placeStarterGarden %d' % avId) self.gardenManager.placeGarden(avId) self.d_updateGarden() def announceGenerate(self): DistributedObjectAI.announceGenerate(self) for index, garden in self.__pendingGardens.items(): started = garden[0] # print index, started if started: self.gardenManager.handleSingleGarden(self.toons[index], garden[1:]) self.__pendingGardens = {}
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])
def _createObjects(self, group, zone): if group.getName()[:13] == "fishing_pond_": visGroup = group.getVisGroup() pondZone = 0 if visGroup is None: pondZone = zone else: pondZone = int(visGroup.getName().split(":")[0]) pondIndex = int(group.getName()[13:]) pond = DistributedFishingPondAI(simbase.air) pond.setArea(zone) pond.generateWithRequired(pondZone) bingoManager = DistributedPondBingoManagerAI(simbase.air) bingoManager.setPondDoId(pond.getDoId()) bingoManager.generateWithRequired(pondZone) # temporary, until we have scheduled stuff bingoManager.createGame() pond.bingoMgr = bingoManager simbase.air.fishManager.ponds[zone] = pond for i in range(FishingTargetGlobals.getNumTargets(zone)): target = DistributedFishingTargetAI(simbase.air) target.setPondDoId(pond.getDoId()) target.generateWithRequired(pondZone) for i in range(group.getNumChildren()): posSpot = group.at(i) if posSpot.getName()[:13] == "fishing_spot_": posSpot = group.atAsNode(i) spot = DistributedFishingSpotAI(simbase.air) spot.setPondDoId(pond.getDoId()) x, y, z = posSpot.getPos() h, p, r = posSpot.getHpr() spot.setPosHpr(x, y, z, h, p, r) spot.generateWithRequired(pondZone) NPCToons.createNpcsInZone(simbase.air, pondZone) elif group.getName()[:10] == "racing_pad": index, dest = group.getName()[11:].split("_", 2) index = int(index) pad = DistributedRacePadAI(simbase.air) pad.setArea(zone) pad.nameType = dest pad.index = index nri = RaceGlobals.getNextRaceInfo(-1, dest, index) pad.setTrackInfo([nri[0], nri[1]]) pad.generateWithRequired(zone) for i in range(group.getNumChildren()): posSpot = group.at(i) if posSpot.getName()[:14] == "starting_block": spotIndex = int(posSpot.getName()[15:]) posSpot = group.atAsNode(i) x, y, z = posSpot.getPos() h, p, r = posSpot.getHpr() startingBlock = DistributedStartingBlockAI(simbase.air) startingBlock.setPosHpr(x, y, z, h, p, r) startingBlock.setPadDoId(pad.getDoId()) startingBlock.setPadLocationId(index) startingBlock.generateWithRequired(zone) pad.addStartingBlock(startingBlock) elif group.getName()[:11] == "viewing_pad": pad = DistributedViewPadAI(simbase.air) pad.setArea(zone) pad.generateWithRequired(zone) for i in range(group.getNumChildren()): posSpot = group.at(i) if posSpot.getName()[:14] == "starting_block": spotIndex = int(posSpot.getName()[15:]) posSpot = group.atAsNode(i) x, y, z = posSpot.getPos() h, p, r = posSpot.getHpr() startingBlock = DistributedViewingBlockAI(simbase.air) startingBlock.setPosHpr(x, y, z, h, p, r) startingBlock.setPadDoId(pad.getDoId()) startingBlock.setPadLocationId(0) startingBlock.generateWithRequired(zone) pad.addStartingBlock(startingBlock) elif group.getName()[:13] == "picnic_table_" and zone != 7000: pos = group.getPos() hpr = group.getHpr() nameInfo = group.getName().split("_") picnicTable = DistributedPicnicBasketAI.DistributedPicnicBasketAI( simbase.air, nameInfo[2], pos[0], pos[1], pos[2], hpr[0], hpr[1], hpr[2] ) picnicTable.generateWithRequired(zone) picnicTable.start() elif group.getName() == "prop_game_table_DNARoot" and config.GetBool("want-oz-game-tables", True): pos = group.getPos() hpr = group.getHpr() nameInfo = group.getName().split("_") tableIndex = int(group.parent.getName().split("_")[-1]) picnicTable = DistributedPicnicTableAI.DistributedPicnicTableAI( simbase.air, zone, nameInfo[2], pos[0], pos[1], pos[2], hpr[0], hpr[1], hpr[2] ) picnicTable.setTableIndex(tableIndex) picnicTable.generateOtpObject( simbase.air.districtId, zone, ["setX", "setY", "setZ", "setH", "setP", "setR"] ) elif group.getName()[:9] == "golf_kart" and config.GetBool("want-golf-karts", True): info = group.getName()[10:].split("_") golfCourse = int(info[0]) kartId = info[1] for i in range(group.getNumChildren()): prop = group.at(i) if prop.getName()[:15] == "starting_block_": pos, hpr = (prop.getPos(), prop.getHpr()) kart = DistributedGolfKartAI.DistributedGolfKartAI( simbase.air, golfCourse, pos[0], pos[1], pos[2], hpr[0], hpr[1], hpr[2] ) kart.generateWithRequired(zone) kart.sendUpdate("setGolfCourse", [golfCourse]) kart.sendUpdate("setPosHpr", [pos[0], pos[1], pos[2], hpr[0], hpr[1], hpr[2]]) color = kart.getColor() kart.sendUpdate("setColor", [color[0], color[1], color[2]]) kart.start() if group.getName()[:15] == "prop_party_gate" and simbase.air.wantParties: gate = DistributedPartyGateAI(simbase.air) gate.setArea(zone) gate.generateWithRequired(zone) for i in range(group.getNumChildren()): child = group.at(i) self._createObjects(child, zone)
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.doId2do = { } self.pond = None self.spots = [] self.targets = [] 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) 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) self.treasurePlanner = ETreasurePlannerAI.ETreasurePlannerAI(self.zoneId) 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 range(0, ButterflyGlobals.NUM_BUTTERFLY_AREAS[ButterflyGlobals.ESTATE]): for j in range(0, ButterflyGlobals.NUM_BUTTERFLIES[ButterflyGlobals.ESTATE]): bfly = DistributedButterflyAI.DistributedButterflyAI(self.air, ButterflyGlobals.ESTATE, i, self.zoneId) bfly.generateWithRequired(self.zoneId) bfly.start() self.addDistObj(bfly) def destroy(self): for house in self.houses: if house: house.requestDelete() if self.pond: self.pond.requestDelete() for spot in self.spots: spot.requestDelete() for target in self.targets: target.requestDelete() self.gardenManager.destroy() 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(self, rental) self.b_setRentalTimeStamp(self, rental) def getRentalTimeStamp(self): return self.rentalTimestamp def setRentalType(self, todo0): pass def getRentalType(self): return 0 def rentItem(self, rentType, duration): pass 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 # garden methods def getToonSlot(self, avId): if avId not in self.toons: return return self.toons.index(avId) @unpackGardenSetter def setSlot0Garden(self, started, flowers, trees, si): self.__pendingGardens[0] = (started, flowers, trees, si) @unpackGardenSetter def setSlot1Garden(self, started, flowers, trees, si): self.__pendingGardens[1] = (started, flowers, trees, si) @unpackGardenSetter def setSlot2Garden(self, started, flowers, trees, si): self.__pendingGardens[2] = (started, flowers, trees, si) @unpackGardenSetter def setSlot3Garden(self, started, flowers, trees, si): self.__pendingGardens[3] = (started, flowers, trees, si) @unpackGardenSetter def setSlot4Garden(self, started, flowers, trees, si): self.__pendingGardens[4] = (started, flowers, trees, si) @unpackGardenSetter def setSlot5Garden(self, started, flowers, trees, si): self.__pendingGardens[5] = (started, flowers, trees, si) def d_updateGarden(self, slot = None): self.notify.info('updateGarden %s' % slot) if slot is None: for i in xrange(6): self.d_updateGarden(i) else: data = self.gardenManager.getData(self.toons[slot]) self.sendUpdate('setSlot%dGarden' % slot, [data]) def placeStarterGarden(self, avId): av = self.air.doId2do.get(avId) if not av: return #av.b_setGardenStarted(1) self.notify.info('placeStarterGarden %d' % avId) self.gardenManager.placeGarden(avId) self.d_updateGarden() def announceGenerate(self): DistributedObjectAI.announceGenerate(self) for index, garden in self.__pendingGardens.items(): started = garden[0] # print index, started if started: self.gardenManager.handleSingleGarden(self.toons[index], garden[1:]) self.__pendingGardens = {} # self.placeStarterGarden(100000001)
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)
def _createObjects(self, group, zone): if group.getName()[:13] == 'fishing_pond_': visGroup = group.getVisGroup() pondZone = 0 if visGroup is None: pondZone = zone else: pondZone = int(visGroup.getName().split(':')[0]) pondIndex = int(group.getName()[13:]) pond = DistributedFishingPondAI(simbase.air) pond.setArea(zone) pond.generateWithRequired(pondZone) #self.ponds[pondIndex] = pond bingoManager = DistributedPondBingoManagerAI(simbase.air) bingoManager.setPondDoId(pond.getDoId()) bingoManager.generateWithRequired(pondZone) #temporary, until we have scheduled stuff bingoManager.createGame() pond.bingoMgr = bingoManager simbase.air.fishManager.ponds[zone] = pond for i in range(FishingTargetGlobals.getNumTargets(zone)): target = DistributedFishingTargetAI(simbase.air) target.setPondDoId(pond.getDoId()) target.generateWithRequired(pondZone) for i in range(group.getNumChildren()): posSpot = group.at(i) if posSpot.getName()[:13] == 'fishing_spot_': spot = DistributedFishingSpotAI(simbase.air) spot.setPondDoId(pond.getDoId()) x, y, z = posSpot.getPos() h, p, r = posSpot.getHpr() spot.setPosHpr(x, y, z, h, p, r) spot.generateWithRequired(pondZone) NPCToons.createNpcsInZone(simbase.air, pondZone) elif group.getName()[:10] == 'racing_pad': index, dest = group.getName()[11:].split('_', 2) index = int(index) pad = DistributedRacePadAI(simbase.air) pad.setArea(zone) pad.nameType = dest pad.index = index nri = RaceGlobals.getNextRaceInfo(-1, dest, index) pad.setTrackInfo([nri[0], nri[1]]) pad.generateWithRequired(zone) for i in range(group.getNumChildren()): posSpot = group.at(i) if posSpot.getName()[:14] == 'starting_block': spotIndex = int(posSpot.getName()[15:]) x, y, z = posSpot.getPos() h, p, r = posSpot.getHpr() startingBlock = DistributedStartingBlockAI(simbase.air) startingBlock.setPosHpr(x, y, z, h, p, r) startingBlock.setPadDoId(pad.getDoId()) startingBlock.setPadLocationId(index) startingBlock.generateWithRequired(zone) pad.addStartingBlock(startingBlock) elif group.getName()[:11] == 'viewing_pad': pad = DistributedViewPadAI(simbase.air) pad.setArea(zone) pad.generateWithRequired(zone) for i in range(group.getNumChildren()): posSpot = group.at(i) if posSpot.getName()[:14] == 'starting_block': spotIndex = int(posSpot.getName()[15:]) x, y, z = posSpot.getPos() h, p, r = posSpot.getHpr() startingBlock = DistributedViewingBlockAI(simbase.air) startingBlock.setPosHpr(x, y, z, h, p, r) startingBlock.setPadDoId(pad.getDoId()) startingBlock.setPadLocationId(0) startingBlock.generateWithRequired(zone) pad.addStartingBlock(startingBlock) if group.getName()[:15] == 'prop_party_gate': gate = DistributedPartyGateAI(simbase.air) gate.setArea(zone) gate.generateWithRequired(zone) for i in range(group.getNumChildren()): self._createObjects(group.at(i), zone)
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) def destroy(self): for house in self.houses: if house: house.requestDelete() if self.pond: self.pond.requestDelete() for spot in self.spots: spot.requestDelete() for target in self.targets: target.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 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
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])
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])
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) def destroy(self): for house in self.houses: if house: house.requestDelete() if self.pond: self.pond.requestDelete() for spot in self.spots: spot.requestDelete() for target in self.targets: target.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 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
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 = 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 self.info = info self.activities = [] self.cannonActivity = None self.avIdsAtParty = [] for activity in self.info['activities']: if activity[0] == ActivityIds.PartyClock: self.partyClockInfo = (activity[1], activity[2], activity[3]) def generate(self): DistributedObjectAI.generate(self) actId2Class = { ActivityIds.PartyJukebox: DistributedPartyJukeboxActivityAI, ActivityIds.PartyTrampoline: DistributedPartyTrampolineActivityAI, ActivityIds.PartyVictoryTrampoline: DistributedPartyVictoryTrampolineActivityAI, ActivityIds.PartyCatch: DistributedPartyCatchActivityAI, ActivityIds.PartyDance: DistributedPartyDanceActivityAI, ActivityIds.PartyTugOfWar: DistributedPartyTugOfWarActivityAI, ActivityIds.PartyFireworks: DistributedPartyFireworksActivityAI, ActivityIds.PartyJukebox40: DistributedPartyJukebox40ActivityAI, ActivityIds.PartyDance20: DistributedPartyDance20ActivityAI, ActivityIds.PartyCog: DistributedPartyCogActivityAI, } for activity in self.info['activities']: actId = activity[0] if actId in actId2Class: act = actId2Class[actId](self.air, self.doId, activity) act.generateWithRequired(self.zoneId) self.activities.append(act) elif actId == ActivityIds.PartyCannon: if not self.cannonActivity: self.cannonActivity = DistributedPartyCannonActivityAI(self.air, self.doId, activity) self.cannonActivity.generateWithRequired(self.zoneId) act = DistributedPartyCannonAI(self.air) act.setActivityDoId(self.cannonActivity.doId) act.setPosHpr(46.5222, -134.739, 0.390713, 75, 0, 0) act.generateWithRequired(self.zoneId) self.activities.append(act) 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) def destroy(self): for house in self.houses: if house: house.requestDelete() if self.pond: self.pond.requestDelete() for spot in self.spots: spot.requestDelete() for target in self.targets: target.requestDelete() for act in self.activities: act.requestDelete() if self.cannonActivity: self.cannonActivity.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 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