import random from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer import os from direct.directnotify import DirectNotifyGlobal from panda3d.core import * class PetNameGenerator: notify = DirectNotifyGlobal.directNotify.newCategory('PetNameGenerator') boyFirsts = [] girlFirsts = [] neutralFirsts = [] def __init__(self): self.generateLists() def generateLists(self): self.boyFirsts = [] self.girlFirsts = [] self.neutralFirsts = [] self.nameDictionary = {} searchPath = DSearchPath() searchPath.appendDirectory(Filename('/phase_3/etc')) filename = Filename(TTLocalizer.PetNameMaster) found = vfs.resolveFilename(filename, searchPath) if not found: self.notify.error('PetNameGenerator: Error opening name list text file.') input = StreamReader(vfs.openReadFile(filename, 1), 1) currentLine = input.readline() while currentLine: if currentLine.lstrip()[0:1] != '#': a1 = currentLine.find('*') a2 = currentLine.find('*', a1 + 1) self.nameDictionary[int(currentLine[0:a1])] = (int(currentLine[a1 + 1:a2]), currentLine[a2 + 1:len(currentLine) - 1].strip()) currentLine = input.readline() masterList = [self.boyFirsts, self.girlFirsts, self.neutralFirsts] for tu in self.nameDictionary.values(): masterList[tu[0]].append(tu[1]) return 1 def getName(self, uniqueID): try: return self.nameDictionary[uniqueID][1] except: return self.nameDictionary[0][1] def returnUniqueID(self, name): newtu = [(), (), ()] newtu[0] = (0, name) newtu[1] = (1, name) newtu[2] = (2, name) for tu in self.nameDictionary.items(): for g in newtu: if tu[1] == g: return tu[0] return -1 def randomName(self, gender = None, seed = None): S = random.getstate() if seed is not None: random.seed(seed) if gender is None: gender = random.choice([0, 1]) retString = '' firstList = self.neutralFirsts[:] if gender == 0: firstList += self.boyFirsts elif gender == 1: firstList += self.girlFirsts else: self.error('Must be boy or girl.') retString += random.choice(firstList) random.setstate(S) return retString