def makePetList(self): self.numPets = len(self.petSeeds) self.curPet = 0 self.petDNA = [] self.petName = [] self.petDesc = [] self.petCost = [] for i in xrange(self.numPets): random.seed(self.petSeeds[i]) zoneId = ZoneUtil.getCanonicalSafeZoneId(base.localAvatar.getZoneId()) name, dna, traitSeed = PetUtil.getPetInfoFromSeed(self.petSeeds[i], zoneId) cost = PetUtil.getPetCostFromSeed(self.petSeeds[i], zoneId) traits = PetTraits.PetTraits(traitSeed, zoneId) traitList = traits.getExtremeTraitDescriptions() numGenders = len(PetDNA.PetGenders) gender = i % numGenders PetDNA.setGender(dna, gender) self.petDNA.append(dna) self.petName.append(TTLocalizer.PetshopUnknownName) descList = [] descList.append(TTLocalizer.PetshopDescGender % PetDNA.getGenderString(gender=gender)) if traitList: descList.append(TTLocalizer.PetshopDescTrait % traitList[0]) else: descList.append(TTLocalizer.PetshopDescTrait % TTLocalizer.PetshopDescStandard) traitList.extend(['', '', '', '']) for trait in traitList[1:4]: descList.append('\t%s' % trait) descList.append(TTLocalizer.PetshopDescCost % cost) self.petDesc.append('\n'.join(descList)) self.petCost.append(cost)
def petAdopted(self, petNum, nameIndex): avId = self.air.getAvatarIdFromSender() if self.busy != avId: self.air.writeServerEvent('suspicious', avId, 'DistributedNPCPetshopAI.petAdopted busy with %s' % self.busy) self.notify.warning('somebody called petAdopted that I was not busy with! avId: %s' % avId) return av = simbase.air.doId2do.get(avId) if av: from toontown.hood import ZoneUtil zoneId = ZoneUtil.getCanonicalSafeZoneId(self.zoneId) if petNum not in list(range(0, len(self.petSeeds))): self.air.writeServerEvent('suspicious', avId, 'DistributedNPCPetshopAI.petAdopted and no such pet!') self.notify.warning('somebody called petAdopted on a non-existent pet! avId: %s' % avId) return cost = PetUtil.getPetCostFromSeed(self.petSeeds[petNum], zoneId) if cost > av.getTotalMoney(): self.air.writeServerEvent('suspicious', avId, "DistributedNPCPetshopAI.petAdopted and toon doesn't have enough money!") self.notify.warning("somebody called petAdopted and didn't have enough money to adopt! avId: %s" % avId) return if av.petId != 0: simbase.air.petMgr.deleteToonsPet(avId) gender = petNum % len(PetDNA.PetGenders) if nameIndex not in list(range(0, TTLocalizer.PetNameIndexMAX)): self.air.writeServerEvent('avoid_crash', avId, "DistributedNPCPetclerkAI.petAdopted and didn't have valid nameIndex!") self.notify.warning("somebody called petAdopted and didn't have valid nameIndex to adopt! avId: %s" % avId) return simbase.air.petMgr.createNewPetFromSeed(avId, self.petSeeds[petNum], nameIndex=nameIndex, gender=gender, safeZoneId=zoneId) self.transactionType = 'adopt' bankPrice = min(av.getBankMoney(), cost) walletPrice = cost - bankPrice av.b_setBankMoney(av.getBankMoney() - bankPrice) av.b_setMoney(av.getMoney() - walletPrice)
def __init__(self, doneEvent, petSeed, petNameIndex): zoneId = ZoneUtil.getCanonicalSafeZoneId(base.localAvatar.getZoneId()) name, dna, traitSeed = PetUtil.getPetInfoFromSeed(petSeed, zoneId) name = TTLocalizer.getPetName(petNameIndex) cost = PetUtil.getPetCostFromSeed(petSeed, zoneId) model = loader.loadModel('phase_4/models/gui/AdoptPet') modelPos = (0, 0, -0.3) modelScale = 0.055 DirectFrame.__init__(self, relief=None, state='normal', geom=model, geom_color=ToontownGlobals.GlobalDialogColor, geom_scale=modelScale, frameSize=(-1, 1, -1, 1), pos=modelPos, text=TTLocalizer.PetshopAdoptConfirm % (name, cost), text_wordwrap=12, text_scale=0.05, text_pos=(0, 0.55), text_fg=text0Color) self.initialiseoptions(PetshopGUI.AdoptPetDlg) self.petView = self.attachNewNode('petView') self.petView.setPos(-0.13, 0, 0.8) self.petModel = Pet.Pet(forGui=1) self.petModel.setDNA(dna) self.petModel.fitAndCenterHead(0.395, forGui=1) self.petModel.reparentTo(self.petView) self.petModel.setH(130) self.petModel.setScale(0.125) self.petModel.enterNeutralHappy() self.moneyDisplay = DirectLabel(parent=self, relief=None, text=str(base.localAvatar.getTotalMoney()), text_scale=0.075, text_fg=(0.95, 0.95, 0, 1), text_shadow=(0, 0, 0, 1), text_pos=(0.225, 0.33), text_font=ToontownGlobals.getSignFont()) self.accept(localAvatar.uniqueName('moneyChange'), self.__moneyChange) self.accept(localAvatar.uniqueName('bankMoneyChange'), self.__moneyChange) okImageList = (model.find('**/CheckButtonUp'), model.find('**/CheckButtonDown'), model.find('**/CheckButtonRollover')) cancelImageList = (model.find('**/CancelButtonUp'), model.find('**/CancelButtonDown'), model.find('**/CancelRollover')) cancelIcon = model.find('**/CancelIcon') checkIcon = model.find('**/CheckIcon') self.cancelButton = DirectButton(parent=self, relief=None, image=cancelImageList, geom=cancelIcon, scale=modelScale, text=('', TTLocalizer.PetshopGoBack), text_pos=(-5.8, 4.4), text_scale=0.7, pressEffect=False, command=lambda : messenger.send(doneEvent, [0])) self.okButton = DirectButton(parent=self, relief=None, image=okImageList, geom=checkIcon, scale=modelScale, text=('', TTLocalizer.PetshopAdopt), text_pos=(5.8, 4.4), text_scale=0.7, pressEffect=False, command=lambda : messenger.send(doneEvent, [1])) model.removeNode() return
def makePetList(self): self.numPets = len(self.petSeeds) self.curPet = 0 self.petDNA = [] self.petName = [] self.petDesc = [] self.petCost = [] for i in xrange(self.numPets): random.seed(self.petSeeds[i]) zoneId = ZoneUtil.getCanonicalSafeZoneId(base.localAvatar.getZoneId()) name, dna, traitSeed = PetUtil.getPetInfoFromSeed(self.petSeeds[i], zoneId) cost = PetUtil.getPetCostFromSeed(self.petSeeds[i], zoneId) traits = PetTraits.PetTraits(traitSeed, zoneId) traitList = traits.getExtremeTraitDescriptions() numGenders = len(PetDNA.PetGenders) gender = i % numGenders PetDNA.setGender(dna, gender) self.petDNA.append(dna) self.petName.append(TTLocalizer.PetshopUnknownName) descList = [] descList.append(TTLocalizer.PetshopDescGender % PetDNA.getGenderString(gender=gender)) if traitList: descList.append(TTLocalizer.PetshopDescTrait % traitList[0]) else: descList.append(TTLocalizer.PetshopDescTrait % TTLocalizer.PetshopDescStandard) traitList.extend(['', '', '', '']) for trait in traitList[1:4]: descList.append('\t%s' % trait) descList.append(TTLocalizer.PetshopDescCost % cost) self.petDesc.append(string.join(descList, '\n')) self.petCost.append(cost)
def petAdopted(self, petNum, nameIndex): avId = self.air.getAvatarIdFromSender() if self.busy != avId: self.air.writeServerEvent('suspicious', avId, 'DistributedNPCPetshopAI.petAdopted busy with %s' % self.busy) self.notify.warning('somebody called petAdopted that I was not busy with! avId: %s' % avId) return av = simbase.air.doId2do.get(avId) if av: from toontown.hood import ZoneUtil zoneId = ZoneUtil.getCanonicalSafeZoneId(self.zoneId) if petNum not in xrange(0, len(self.petSeeds)): self.air.writeServerEvent('suspicious', avId, 'DistributedNPCPetshopAI.petAdopted and no such pet!') self.notify.warning('somebody called petAdopted on a non-existent pet! avId: %s' % avId) return cost = PetUtil.getPetCostFromSeed(self.petSeeds[petNum], zoneId) if cost > av.getTotalMoney(): self.air.writeServerEvent('suspicious', avId, "DistributedNPCPetshopAI.petAdopted and toon doesn't have enough money!") self.notify.warning("somebody called petAdopted and didn't have enough money to adopt! avId: %s" % avId) return if av.petId != 0: simbase.air.petMgr.deleteToonsPet(avId) gender = petNum % len(PetDNA.PetGenders) if nameIndex not in xrange(0, len(TTLocalizer.PetNameDictionary) - 1): self.air.writeServerEvent('avoid_crash', avId, "DistributedNPCPetclerkAI.petAdopted and didn't have valid nameIndex!") self.notify.warning("somebody called petAdopted and didn't have valid nameIndex to adopt! avId: %s" % avId) return simbase.air.petMgr.createNewPetFromSeed(avId, self.petSeeds[petNum], nameIndex=nameIndex, gender=gender, safeZoneId=zoneId) self.notify.warning("Created new pet from seed") self.transactionType = 'adopt' bankPrice = min(av.getBankMoney(), cost) walletPrice = cost - bankPrice av.b_setBankMoney(av.getBankMoney() - bankPrice) av.b_setMoney(av.getMoney() - walletPrice)
def __init__(self, doneEvent, petSeed, petNameIndex): zoneId = ZoneUtil.getCanonicalSafeZoneId(base.localAvatar.getZoneId()) name, dna, traitSeed = PetUtil.getPetInfoFromSeed(petSeed, zoneId) name = PetNameGenerator.PetNameGenerator().getName(petNameIndex) cost = PetUtil.getPetCostFromSeed(petSeed, zoneId) model = loader.loadModel('phase_4/models/gui/AdoptPet') modelPos = (0, 0, -0.3) modelScale = 0.055 DirectFrame.__init__(self, relief=None, state='normal', geom=model, geom_color=ToontownGlobals.GlobalDialogColor, geom_scale=modelScale, frameSize=(-1, 1, -1, 1), pos=modelPos, text=TTLocalizer.PetshopAdoptConfirm % (name, cost), text_wordwrap=12, text_scale=0.05, text_pos=(0, 0.55), text_fg=text0Color) self.initialiseoptions(PetshopGUI.AdoptPetDlg) self.petView = self.attachNewNode('petView') self.petView.setPos(-0.13, 0, 0.8) self.petModel = Pet.Pet(forGui=1) self.petModel.setDNA(dna) self.petModel.fitAndCenterHead(0.395, forGui=1) self.petModel.reparentTo(self.petView) self.petModel.setH(130) self.petModel.enterNeutralHappy() self.moneyDisplay = DirectLabel(parent=self, relief=None, text=str(base.localAvatar.getTotalMoney()), text_scale=0.075, text_fg=(0.95, 0.95, 0, 1), text_shadow=(0, 0, 0, 1), text_pos=(0.225, 0.33), text_font=ToontownGlobals.getSignFont()) self.accept(localAvatar.uniqueName('moneyChange'), self.__moneyChange) self.accept(localAvatar.uniqueName('bankMoneyChange'), self.__moneyChange) okImageList = (model.find('**/CheckButtonUp'), model.find('**/CheckButtonDown'), model.find('**/CheckButtonRollover')) cancelImageList = (model.find('**/CancelButtonUp'), model.find('**/CancelButtonDown'), model.find('**/CancelRollover')) cancelIcon = model.find('**/CancelIcon') checkIcon = model.find('**/CheckIcon') self.cancelButton = DirectButton(parent=self, relief=None, image=cancelImageList, geom=cancelIcon, scale=modelScale, text=('', TTLocalizer.PetshopGoBack), text_pos=(-5.8, 4.4), text_scale=0.7, pressEffect=False, command=lambda : messenger.send(doneEvent, [0])) self.okButton = DirectButton(parent=self, relief=None, image=okImageList, geom=checkIcon, scale=modelScale, text=('', TTLocalizer.PetshopAdopt), text_pos=(5.8, 4.4), text_scale=0.7, pressEffect=False, command=lambda : messenger.send(doneEvent, [1])) model.removeNode() return
def makePetList(self): """ This should get called when we first enter the PetChooser. It creates the list of toons that are available here. """ self.numPets = len(self.petSeeds) self.curPet = 0 self.petDNA = [] self.petName = [] self.petDesc = [] self.petCost = [] for i in range(self.numPets): random.seed(self.petSeeds[i]) zoneId = ZoneUtil.getCanonicalSafeZoneId( base.localAvatar.getZoneId()) name, dna, traitSeed = PetUtil.getPetInfoFromSeed( self.petSeeds[i], zoneId) cost = PetUtil.getPetCostFromSeed(self.petSeeds[i], zoneId) traits = PetTraits.PetTraits(traitSeed, zoneId) traitList = traits.getExtremeTraitDescriptions() numGenders = len(PetDNA.PetGenders) gender = i % numGenders PetDNA.setGender(dna, gender) self.petDNA.append(dna) self.petName.append(TTLocalizer.PetshopUnknownName) #build the 'description' strings descList = [] descList.append(TTLocalizer.PetshopDescGender % PetDNA.getGenderString(gender=gender)) if traitList: descList.append(TTLocalizer.PetshopDescTrait % traitList[0]) else: descList.append(TTLocalizer.PetshopDescTrait % TTLocalizer.PetshopDescStandard) #buffer the list so there are at least 4 items traitList.extend(["", "", "", ""]) for trait in traitList[1:4]: descList.append("\t%s" % trait) descList.append(TTLocalizer.PetshopDescCost % cost) self.petDesc.append("\n".join(descList)) self.petCost.append(cost)
def petAdopted(self, petNum, nameIndex): assert self.notify.debug('petAdopted()') avId = self.air.getAvatarIdFromSender() if self.busy != avId: self.air.writeServerEvent('suspicious', avId, 'DistributedNPCPetshopAI.petAdopted busy with %s' % (self.busy)) self.notify.warning("somebody called petAdopted that I was not busy with! avId: %s" % avId) return av = simbase.air.doId2do.get(avId) if av: from toontown.hood import ZoneUtil zoneId = ZoneUtil.getCanonicalSafeZoneId(self.zoneId) # make sure this isn't a suspicious request if not petNum in range(0, len(self.petSeeds)): # hacker? self.air.writeServerEvent('suspicious', avId, "DistributedNPCPetshopAI.petAdopted and no such pet!") self.notify.warning("somebody called petAdopted on a non-existent pet! avId: %s" % avId) return cost = PetUtil.getPetCostFromSeed(self.petSeeds[petNum], zoneId) if cost > av.getTotalMoney(): #houston, we have a problem self.air.writeServerEvent('suspicious', avId, "DistributedNPCPetshopAI.petAdopted and toon doesn't have enough money!") self.notify.warning("somebody called petAdopted and didn't have enough money to adopt! avId: %s" % avId) return if av.petId != 0: # this function deletes the pet simbase.air.petMgr.deleteToonsPet(avId) #create new pet gender = petNum % len(PetDNA.PetGenders) simbase.air.petMgr.createNewPetFromSeed(avId, self.petSeeds[petNum], nameIndex = nameIndex, gender = gender, safeZoneId = zoneId) self.transactionType = "adopt" #deduct the money from the toon's account bankPrice = min(av.getBankMoney(), cost) walletPrice = cost - bankPrice av.b_setBankMoney(av.getBankMoney() - bankPrice) av.b_setMoney(av.getMoney() - walletPrice) else: # perhaps the avatar got disconnected, just leave the fish # in his tank and let him resell them next time pass